摘要:作用域鏈迷惑性代碼不假思索的想到出書的一定是啊,然而結結實實被打臉,輸出原因在編譯時,全局作用域中會存有的對象作用域中存的無在運行時,我這里需要變量啊,但是在的作用域中并不存在,那么就需要去全局作用域中尋找報告老大找到了,輸出全局作用域中的
作用域鏈
迷惑性代碼
var a = 100; function test(){ console.log(a); } function testFun(){ var a = 200; test(); }
不假思索的想到 出書的一定是 200啊 ,然而結結實實被打臉,輸出 100
在編譯時,
全局作用域中會存有的對象
a
test
testFun
testFun作用域中存的
a
test
無
在運行時,
test() 我這里需要變量a 啊,但是在test的作用域中并不存在,那么就需要去全局作用域中尋找 a,報告老大找到了,輸出全局作用域中的a,輸出100
迷惑性代碼
var a = 100; function testFun2(){ var a = 300; function test(){ console.log(a) } test(); } testFun2();
輸出什么? 300!
?!為什么呢
作用域鏈再走一波
1.全局作用域
a
testFun2
testFun2
a
test
test
無
運行時test時,報告老大,我需要變量a ,test作用域:我沒有啊,你去看看testFun2有沒有;
testFun2作用域:我有 給你拿去好了;
輸出 300
實例
"use strict"; x = 3.14; // 報錯(x 未定義)
"use strict" myFunction(); function myFunction(){ y = 3.14; // 報錯 (y 未定義) }
// 不允許刪除變量或對象 "use strict"; var x = 3.14; delete x ;
// 不允許刪除函數 "use strict"; function x(p1,p2){}; delete x ; // 報錯
// 不允許變量重名 "use strict"; function x(p1,p1){} // 報錯
// 不允許使用八進制 "use strict"; var x = 010; // 報錯
// 不允許使用轉義字符 "use strict"; var x=