在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 淺談 javascript 中的作用域
淺談 JavaScript 之事件綁定
淺談 javascript 中字符串 String 與數(shù)組 Array
淺談 javascript 中基本包裝類(lèi)型
淺談 JavaScript Math 和 Number 對(duì)象
淺談 Javascript 的靜態(tài)屬性和原型屬性
淺談 JavaScript 中定義變量時(shí)有無(wú) var 聲明的區(qū)別
淺談 JavaScript Array 對(duì)象
淺談 JavaScript 函數(shù)參數(shù)的可修改性問(wèn)題
淺談 javascript 中的 instanceof 和 typeof
淺談 JavaScript 中 Date (日期對(duì)象),Math 對(duì)象
淺談 Javascript 執(zhí)行順序
淺談 javascript 函數(shù)屬性和方法
淺談 JavaScript 中面向?qū)ο蠹夹g(shù)的模擬
淺談 javascript 的原型繼承
淺談 javascript 事件取消和阻止冒泡
根據(jù)一段代碼淺談 Javascript 閉包
淺談 Javascript 面向?qū)ο缶幊?/span>
淺談 javascript 六種數(shù)據(jù)類(lèi)型以及特殊注意點(diǎn)
淺談 Javascript 變量作用域問(wèn)題
淺談 javascript 函數(shù)內(nèi)部屬性
淺談 javascript 中自定義模版
淺談 JavaScript 字符集
淺談 javascript 面向?qū)ο缶幊?/span>
淺談 JavaScript 框架分類(lèi)
淺談 JavaScript 中的 Math.atan() 方法的使用
淺談 Javascript 數(shù)組與字典
淺談 JavaScript 數(shù)據(jù)類(lèi)型及轉(zhuǎn)換
淺談 javascript 的調(diào)試
淺談 Javascript 嵌套函數(shù)及閉包
淺談 javascript 回調(diào)函數(shù)
淺談 JavaScript Date 日期和時(shí)間對(duì)象
淺談 Javascript 中的 Function 與 Object
淺談 JavaScript 數(shù)據(jù)類(lèi)型
淺談 javascript 中 this 在事件中的應(yīng)用
淺談 javascript 中的閉包
淺談 javascript 函數(shù)劫持
淺談 Javascript 中深復(fù)制
淺談 JavaScript 函數(shù)節(jié)流
淺談 JavaScript 中的 String 對(duì)象常用方法
淺談 JavaScript 事件的屬性列表
淺談 JavaScript 函數(shù)與棧
淺談 JavaScript 的事件
淺談 javascript 中的作用域
淺談 JavaScript 的執(zhí)行效率
淺談 Javascript 事件模擬
淺談 JavaScript function 函數(shù)種類(lèi)
淺談 javascript 歸并方法
淺談 javascript 迭代方法
淺談 JavaScript 編程語(yǔ)言的編碼規(guī)范
淺談 JavaScript 實(shí)現(xiàn)面向?qū)ο笾械念?lèi)
淺談 Javascript 鼠標(biāo)和滾輪事件
淺談 Javascript Base64 加密解密
淺談 Javascript 中勻速運(yùn)動(dòng)的停止條件
淺談 javascript 實(shí)現(xiàn)八大排序
淺談 javascript 的分號(hào)的使用
淺談 javascript 中 createElement 事件
淺談 javascript 的數(shù)據(jù)類(lèi)型檢測(cè)
淺談 javascript 對(duì)象模型和 function 對(duì)象
淺談 Javascript 如何實(shí)現(xiàn)勻速運(yùn)動(dòng)
淺談 JavaScript 字符串與數(shù)組
淺談 javascript 面向?qū)ο蟪绦蛟O(shè)計(jì)
淺談 Javascript 事件處理程序的幾種方式

淺談 javascript 中的作用域

JS 中作用域的概念:

表示變量或函數(shù)起作用的區(qū)域,指代了它們?cè)谑裁礃拥纳舷挛闹袌?zhí)行,亦即上下文執(zhí)行環(huán)境。Javascript 的作用域只有兩種:全局作用域和本地作用域,本地作用域是按照函數(shù)來(lái)區(qū)分的。

首先來(lái)看幾道題目:

1.

if(true){   
var aa= "bb";   
}   
console.log(aa); //bb   

for(var i = 0; i <100; i++){   
//do   
}   
console.log(i); //100  

2.

var bb = '11111';   
function aa() {   
alert(bb);//undefine   
var bb = 'test';   
alert(bb);//test   
   var cc = "test1";   
alert(age);// 語(yǔ)法錯(cuò)誤   
}   
aa();  

3.

var test = '1111111';   
function aa() {   
alert(test);   
}   

function bb() {   
var test = '22222222';   
aa();   
}   

bb();//alert(1111111);  

4.

alert(typeof aa); //function   
alert(typeof bb); //undefined function aa() { // 函數(shù)定義式   
alert('I am 111111111');   
};   
var bb = function() { // 函數(shù)表達(dá)式   
}   
alert(typeof bb);//function  

5.

function aa(){   
var bb = "test";   
cc = "測(cè)試";   
alert(bb);   
}   
aa();   
alert(cc);// 測(cè)試   
alert(bb);// 語(yǔ)法報(bào)錯(cuò)  

上面這 5 道題目全部概括了 js 中作用域的問(wèn)題。

可以總結(jié)出這么幾個(gè)觀點(diǎn):

無(wú)塊級(jí)作用域

從第一題中可以看出來(lái),在{}中執(zhí)行后,變量并沒(méi)有被銷(xiāo)毀,還是保存在內(nèi)存中的,因此我們可以訪問(wèn)到的。

JavaScript 中的函數(shù)運(yùn)行在它們被定義的作用域里, 而不是它們被執(zhí)行的作用域里.

這里提到函數(shù)的作用域鏈這個(gè)概念,在 ECMA262 中,是這樣的

任何執(zhí)行上下文時(shí)刻的作用域,都是由作用域鏈 (scope chain) 來(lái)實(shí)現(xiàn)。 在一個(gè)函數(shù)被定義的時(shí)候,會(huì)將它定義時(shí)候的 scope chain 鏈接到這個(gè)函數(shù)對(duì)象的[[scope]]屬性。 在一個(gè)函數(shù)對(duì)象被調(diào)用的時(shí)候,會(huì)創(chuàng)建一個(gè)活動(dòng)對(duì)象 (也就是一個(gè)對(duì)象,然后對(duì)于每一個(gè)函數(shù)的形參,都命名為該活動(dòng)對(duì)象的命名屬性,然后將這個(gè)活動(dòng)對(duì)象做為此時(shí)的作用域鏈 (scope chain) 最前端, 并將這個(gè)函數(shù)對(duì)象的 [[scope]] 加入到 scope chain 中。 所以題目 3 結(jié)果是 alert(1111111);

JS 會(huì)提前處理 function 定義式 和 var 關(guān)鍵字

如題目 4 開(kāi)始 alert(bb); //undefine ,alert(age)//語(yǔ)法報(bào)錯(cuò),這兩個(gè)有什么區(qū)別呢,原因就是后面有 var bb =“test”,在初始化的時(shí)候提前處理了 var 這個(gè)關(guān)鍵字,只是這個(gè)開(kāi)始未賦值

將代碼修改成這樣的,可以看出來(lái)

var dd = '11111';   
function aa() {   
alert(bb);//undefine   
   var bb = 'test';   
alert(bb);//test   
   var cc = "test1";   
alert(age);// 語(yǔ)法錯(cuò)誤   
}   
aa();   
alert(dd);//11111   
alert(cc);// 語(yǔ)法報(bào)錯(cuò)  

此處 alert(bb)沒(méi)有報(bào)語(yǔ)法錯(cuò)誤,alert(age)報(bào)語(yǔ)法錯(cuò)誤。

但是請(qǐng)注意:

<script>   
alert(typeof aa); // 結(jié)果: undefined   
</script>   
<script>   
function aa() {   
alert('yupeng');   
}   
</script>  

這說(shuō)明 js 預(yù)編譯是以段為單元的。題目 4 同理

函數(shù)級(jí)作用域

函數(shù)里面的定義的變量,在函數(shù)執(zhí)行完后就銷(xiāo)毀了,不占有內(nèi)存區(qū)域了。

所以題目 2 最后的 alert(cc);語(yǔ)法報(bào)錯(cuò),題目 5 最后到 alert(bb)同理。