久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

簡(jiǎn)約JavaScript中的變量對(duì)象

JavaScript內(nèi)功之變量對(duì)象

簡(jiǎn)約JavaScript中的變量對(duì)象

目錄

  • 前言
  • 一、變量對(duì)象
  • 二、全局變量對(duì)象
  • 三、函數(shù)變量對(duì)象
  • 寫在最后

(免費(fèi)學(xué)習(xí)推薦:javascript視頻教程

前言

JavaScript編程的時(shí)候總避免不了聲明函數(shù)和變量,以成功構(gòu)建我們的系統(tǒng),但是解釋器是如何并且在什么地方去查找這些函數(shù)和變量呢?我們引用這些對(duì)象的時(shí)候究竟發(fā)生了什么?

在上篇《JavaScript中的執(zhí)行上下文》中我們提到了一部分,當(dāng) JavaScript 代碼執(zhí)行一段可執(zhí)行代碼(executable code)時(shí),會(huì)創(chuàng)建對(duì)應(yīng)的執(zhí)行上下文(execution context)。

對(duì)于每個(gè)執(zhí)行上下文,都有三個(gè)重要屬性:

  • 變量對(duì)象(Variable object,VO)
  • 作用域鏈(Scope chain)
  • this

簡(jiǎn)約JavaScript中的變量對(duì)象

一、變量對(duì)象

在函數(shù)上下文中,我們用活動(dòng)對(duì)象(activation object, AO)來表示變量對(duì)象。

活動(dòng)對(duì)象和變量對(duì)象其實(shí)是一個(gè)東西

  1. 變量對(duì)象是規(guī)范上的或者說是引擎實(shí)現(xiàn)上的,不可在 JavaScript 環(huán)境中訪問
  2. 只有到當(dāng)進(jìn)入一個(gè)執(zhí)行上下文中,這個(gè)執(zhí)行上下文的變量對(duì)象才會(huì)被激活,所以才叫 activation object 吶,而只有被激活的變量對(duì)象,也就是活動(dòng)對(duì)象上的各種屬性才能被訪問。

這里附上一張貘大對(duì)于兩者關(guān)系的回答:
簡(jiǎn)約JavaScript中的變量對(duì)象

我們可以將變量對(duì)象的創(chuàng)建過程用代碼模擬一下:

1.我們用普通的對(duì)象來表示變量對(duì)象

var VO = {}; // 變量對(duì)象

2.而變量對(duì)象是執(zhí)行上下文的一個(gè)屬性:

activeContext = {   VO: {     // 上下文數(shù)據(jù)(var, FD, function arguments)   }};

3.當(dāng)我們遇到下面的代碼時(shí):

var a = 10;function func(x){     var b = 20;}func(30);

4.對(duì)應(yīng)的變量對(duì)象應(yīng)該是:

// 全局變量對(duì)象VO(Global) = {     a: 10,     func: reference to function plus(){}}// func函數(shù)上下文的變量對(duì)象VO(func functionContext) = {   x: 30,   b: 20};

因?yàn)椴煌瑘?zhí)行上下文下的變量對(duì)象稍有不同,所以我們分開來說。

簡(jiǎn)約JavaScript中的變量對(duì)象

二、全局變量對(duì)象

我們先了解一個(gè)概念,叫全局對(duì)象。在 W3School 中也有介紹:

全局對(duì)象是預(yù)定義的對(duì)象,作為 JavaScript 的全局函數(shù)和全局屬性的占位符。通過使用全局對(duì)象,可以訪問所有其他所有預(yù)定義的對(duì)象、函數(shù)和屬性。

1.可以通過 this 引用,在客戶端 JavaScript 中,全局對(duì)象就是 Window 對(duì)象。

console.log(this); //Window

2.全局對(duì)象是由 Object 構(gòu)造函數(shù)實(shí)例化的一個(gè)對(duì)象。

console.log(this instanceof Object); // true

3.預(yù)定義了一堆,嗯,一大堆函數(shù)和屬性。

// 都能生效console.log(Math.random());  //隨機(jī)數(shù)console.log(this.Math.random()); //隨機(jī)數(shù)

4.作為全局變量的宿主(很牛的樣子)

var a = 1;console.log(this.a);// 1

5.客戶端 JavaScript 中,全局對(duì)象有 window 屬性指向自身。

var a = 1;console.log(window.a); // 1this.window.b = 2;console.log(this.b); // 2

而全局上下文中的變量對(duì)象就是全局對(duì)象!

簡(jiǎn)約JavaScript中的變量對(duì)象

三、函數(shù)上下文中的變量對(duì)象

在函數(shù)執(zhí)行上下文中,VO是不能直接訪問的,此時(shí)由活動(dòng)對(duì)象(activation object,縮寫為AO)扮演VO的角色。

VO(functionContext) === AO

活動(dòng)對(duì)象是在進(jìn)入函數(shù)上下文時(shí)刻被創(chuàng)建的,它通過函數(shù)的arguments屬性初始化。arguments屬性的值是Arguments對(duì)象:

AO = {     arguments: <ArgO>}

Arguments對(duì)象是活動(dòng)對(duì)象的一個(gè)屬性,它包括如下屬性:

  1. callee — 指向當(dāng)前函數(shù)的引用
  2. length — 真正傳遞的參數(shù)個(gè)數(shù)
  3. properties-indexes (字符串類型的整數(shù)) 屬性的值就是函數(shù)的參數(shù)值(按參數(shù)列表從左到右排列)。
  4. properties-indexes內(nèi)部元素的個(gè)數(shù)等于arguments.length. properties-indexes 的值和實(shí)際傳遞進(jìn)來的參數(shù)之間是共享的。

我們來看下面代碼:

function foo(x, y, z) {     // 聲明的函數(shù)參數(shù)數(shù)量arguments (x, y, z)   alert(foo.length); // 3     // 真正傳進(jìn)來的參數(shù)個(gè)數(shù)(only x, y)   alert(arguments.length); // 2     // 參數(shù)的callee是函數(shù)自身   alert(arguments.callee === foo); // true     // 參數(shù)共享     alert(x === arguments[0]); // true   alert(x); // 10     arguments[0] = 20;   alert(x); // 20     x = 30;   alert(arguments[0]); // 30     // 不過,沒有傳進(jìn)來的參數(shù)z,和參數(shù)的第3個(gè)索引值是不共享的    z = 40;   alert(arguments[2]); // undefined     arguments[2] = 50;   alert(z); // 40  }  foo(10, 20);

3.1 執(zhí)行過程

執(zhí)行上下文的代碼會(huì)分成兩個(gè)階段進(jìn)行處理:分析和執(zhí)行,我們也可以叫做:

  1. 進(jìn)入執(zhí)行上下文
  2. 代碼執(zhí)行

3.2 進(jìn)入執(zhí)行上下文

當(dāng)進(jìn)入執(zhí)行上下文時(shí),這時(shí)候還沒有執(zhí)行代碼,

變量對(duì)象會(huì)包括:

  1. 函數(shù)的所有形參 (如果是函數(shù)上下文)

    • 由名稱和對(duì)應(yīng)值組成的一個(gè)變量對(duì)象的屬性被創(chuàng)建
    • 沒有實(shí)參,屬性值設(shè)為 undefined
  2. 函數(shù)聲明

    • 由名稱和對(duì)應(yīng)值(函數(shù)對(duì)象(function-object))組成一個(gè)變量對(duì)象的屬性被創(chuàng)建
    • 如果變量對(duì)象已經(jīng)存在相同名稱的屬性,則完全替換這個(gè)屬性
  3. 變量聲明

    • 由名稱和對(duì)應(yīng)值(undefined)組成一個(gè)變量對(duì)象的屬性被創(chuàng)建;
    • 如果變量名稱跟已經(jīng)聲明的形式參數(shù)或函數(shù)相同,則變量聲明不會(huì)干擾已經(jīng)存在的這類屬性

舉個(gè)例子:

function foo(a) {   var b = 2;   function c() {}   var d = function() {};    b = 3;}foo(1);

在進(jìn)入執(zhí)行上下文后,這時(shí)候的 AO 是:

AO = {     arguments: {         0: 1,         length: 1     },     a: 1,     b: undefined,     c: reference to function c(){},     d: undefined}

3.3 代碼執(zhí)行

在代碼執(zhí)行階段,會(huì)順序執(zhí)行代碼,根據(jù)代碼,修改變量對(duì)象的值

還是上面的例子,當(dāng)代碼執(zhí)行完后,這時(shí)候的 AO 是:

AO = {     arguments: {         0: 1,         length: 1     },     a: 1,     b: 3,     c: reference to function c(){},     d: reference to FunctionExpression "d"}

到這里變量對(duì)象的創(chuàng)建過程就介紹完了,讓我們簡(jiǎn)潔的總結(jié)我們上述所說:

  1. 全局上下文的變量對(duì)象初始化是全局對(duì)象;
  2. 函數(shù)上下文的變量對(duì)象初始化只包括 Arguments 對(duì)象;
  3. 在進(jìn)入執(zhí)行上下文時(shí)會(huì)給變量對(duì)象添加形參、函數(shù)聲明、變量聲明等初始的屬性值;
  4. 在代碼執(zhí)行階段,會(huì)再次修改變量對(duì)象的屬性值;

思考題

最后讓我們看幾個(gè)例子:

1.第一題

function foo() {     console.log(a);     a = 1;}foo(); // ???function bar() {     a = 1;     console.log(a);}bar(); // ???

第一段會(huì)報(bào)錯(cuò):Uncaught ReferenceError: a is not defined

第二段會(huì)打印:1

這是因?yàn)楹瘮?shù)中的 “a” 并沒有通過 var 關(guān)鍵字聲明,所有不會(huì)被存放在 AO 中。

第一段執(zhí)行 console 的時(shí)候, AO 的值是:

AO = {     arguments: {         length: 0     }}

沒有 a 的值,然后就會(huì)到全局去找,全局也沒有,所以會(huì)報(bào)錯(cuò)。

當(dāng)?shù)诙螆?zhí)行 console 的時(shí)候,全局對(duì)象已經(jīng)被賦予了 a 屬性,這時(shí)候就可以從全局找到 a 的值,所以會(huì)打印 1。

2.第二題

console.log(foo);function foo(){     console.log("foo");}var foo = 1;

會(huì)打印函數(shù),而不是 undefined 。

這是因?yàn)樵谶M(jìn)入執(zhí)行上下文時(shí),首先會(huì)處理函數(shù)聲明,其次會(huì)處理變量聲明,如果如果變量名稱跟已經(jīng)聲明的形式參數(shù)或函數(shù)相同,則變量聲明不會(huì)干擾已經(jīng)存在的這類屬性。

相關(guān)免費(fèi)學(xué)習(xí)推薦:javascript(視頻)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日本综合视频| 麻豆9191精品国产| 久久在线91| 亚洲美女久久| 99tv成人| 精品视频一区二区三区四区五区| 婷婷中文字幕一区| 福利精品一区| 四虎在线精品| 国产精品久久久久久久久久10秀| 91精品在线观看国产| 国产一级成人av| 中文字幕成人| 视频一区二区三区入口| 久久精品国产大片免费观看| 精品三级av| 国产精品中文字幕制服诱惑| 欧美专区一区二区三区| 日韩av免费大片| 国产一区二区精品久| 欧美13videosex性极品| 国产精品欧美大片| 国产免费av一区二区三区| 亚洲乱亚洲高清| 亚洲狼人精品一区二区三区| 久久美女精品| 欧美日韩一二| 日韩一区二区免费看| 亚洲一区日韩| 亚州av一区| 老牛国内精品亚洲成av人片| 久久国产精品美女| 国产精品一区毛片| 美女久久久精品| 久久国产中文字幕| 婷婷亚洲五月| 日韩高清不卡在线| 国内一区二区三区| 欧美aa国产视频| 婷婷成人av| 麻豆91小视频| 99精品美女| 青草国产精品久久久久久| 136国产福利精品导航网址| 999精品色在线播放| 人人精品人人爱| 国产亚洲观看| 久久久久久美女精品| 亚洲免费观看高清完整版在线观| 国产日韩欧美一区二区三区在线观看 | 国产精品99精品一区二区三区∴ | 成人精品国产亚洲| 日韩一区中文| 欧美一级精品| 国产福利亚洲| 少妇精品久久久一区二区三区| 欧美精品影院| 欧美 日韩 国产一区二区在线视频| 久久不射网站| 国产日韩欧美一区二区三区在线观看| 日韩1区2区日韩1区2区| 香蕉成人av| 欧美aⅴ一区二区三区视频| 蜜桃久久久久久| 久久精品av| 欧美日韩在线二区| 成人在线视频中文字幕| 日韩精品欧美大片| 视频一区在线视频| 国产高潮在线| 国产aⅴ精品一区二区四区| 久久精品动漫| 免费不卡中文字幕在线| 国产精品久久久久久久久久久久久久久| 日韩一区二区三区免费| 国产精品分类| 国产精品欧美一区二区三区不卡| 亚洲aa在线| 婷婷综合一区| 欧美日韩1区2区3区| 视频精品一区| 日韩二区三区在线观看| 亚洲人成精品久久久| 精精国产xxxx视频在线野外| 国产精品调教| 精品国产亚洲日本| 成人精品国产亚洲| 国产在线不卡| 中文字幕一区日韩精品| 激情综合自拍| 亚洲黄色影院| 日韩专区一卡二卡| 欧美一区91| 97精品国产一区二区三区| 日韩网站中文字幕| 亚洲精品视频一二三区| 亚洲日产国产精品| 欧美国产专区| 欧美午夜精品一区二区三区电影| 午夜一区在线| 国产精品欧美在线观看| 久久影院午夜精品| 夜夜嗨一区二区三区| 日韩精品中文字幕一区二区| 久久成人福利| 亚洲综合电影| 热久久国产精品| 欧美成人aaa| 中文日韩欧美| 91精品一区| 久久青青视频| 天堂va在线高清一区| 动漫av一区| 97se亚洲| 亚洲视频国产精品| 日韩视频网站在线观看| 日韩精品亚洲专区在线观看| 精品中文字幕一区二区三区四区| 婷婷综合激情| 日韩欧美一区二区三区免费看| 亚洲第一精品影视| 精品三级国产| 蜜桃视频欧美| 精品国产乱码久久久| 日本在线视频一区二区| 在线日韩中文| 三级小说欧洲区亚洲区| 国产精品网在线观看| 中文在线日韩| 中文精品视频| 快she精品国产999| 婷婷综合激情| 欧美日韩中文一区二区| a国产在线视频| 久久精品一本| 国产一卡不卡| 亚洲一区二区免费看| 99精品视频在线| 女人天堂亚洲aⅴ在线观看| 免费欧美一区| 久久亚洲二区| 亚洲人成毛片在线播放女女| 亚洲一区二区日韩| 日韩精品导航| 国产一区调教| 欧美日韩在线网站| 模特精品在线| 国产欧美日韩一区二区三区四区 | 偷拍亚洲精品| 91精品在线免费视频| 麻豆一区二区99久久久久| 福利一区二区免费视频| 欧美+日本+国产+在线a∨观看| 美女精品一区| 国产精品成人3p一区二区三区| 国产一区福利| 香蕉视频成人在线观看| 国产亚洲人成a在线v网站| 国产一区二区三区探花| 国产精品亚洲片在线播放| 国产成人精品一区二区三区视频 | 久久香蕉国产| 欧美日韩va| 国产99精品| 国产亚洲精aa在线看| 久久婷婷亚洲| 日韩不卡免费视频| 91精品在线免费视频| 日韩精品一区二区三区免费观影 | 麻豆国产精品| 亚洲免费毛片| 成人午夜精品| 国产精品二区影院| 亚洲日韩中文字幕一区| 国产一区日韩欧美| 福利精品一区| 国产精品亚洲产品| 久久成人精品| 伊人久久大香线蕉av不卡| 日本不卡视频在线观看| 在线一区免费观看| 91精品国产福利在线观看麻豆| 欧美日韩一区二区三区不卡视频| 蜜桃视频欧美| 日韩精品欧美| 在线看片国产福利你懂的| 国产精品videossex| 天堂精品久久久久| 日韩精品一区二区三区中文在线| 国产精品日本欧美一区二区三区| 国产suv精品一区二区四区视频| 亚洲另类黄色| 视频一区二区国产| 99久久亚洲精品蜜臀| 久久99精品久久久野外观看| 亚洲另类黄色| 自拍自偷一区二区三区| 天海翼精品一区二区三区| 亚洲欧美日韩国产一区| 午夜精品免费|