摘要:作用域鏈迷惑性代碼不假思索的想到出書的一定是啊,然而結(jié)結(jié)實(shí)實(shí)被打臉,輸出原因在編譯時(shí),全局作用域中會存有的對象作用域中存的無在運(yùn)行時(shí),我這里需要變量啊,但是在的作用域中并不存在,那么就需要去全局作用域中尋找報(bào)告老大找到了,輸出全局作用域中的
作用域鏈
迷惑性代碼
var a = 100; function test(){ console.log(a); } function testFun(){ var a = 200; test(); }
不假思索的想到 出書的一定是 200啊 ,然而結(jié)結(jié)實(shí)實(shí)被打臉,輸出 100
在編譯時(shí),
全局作用域中會存有的對象
a
test
testFun
testFun作用域中存的
a
test
無
在運(yùn)行時(shí),
test() 我這里需要變量a 啊,但是在test的作用域中并不存在,那么就需要去全局作用域中尋找 a,報(bào)告老大找到了,輸出全局作用域中的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
無
運(yùn)行時(shí)test時(shí),報(bào)告老大,我需要變量a ,test作用域:我沒有啊,你去看看testFun2有沒有;
testFun2作用域:我有 給你拿去好了;
輸出 300
實(shí)例
"use strict"; x = 3.14; // 報(bào)錯(cuò)(x 未定義)
"use strict" myFunction(); function myFunction(){ y = 3.14; // 報(bào)錯(cuò) (y 未定義) }
// 不允許刪除變量或?qū)ο?"use strict"; var x = 3.14; delete x ;
// 不允許刪除函數(shù) "use strict"; function x(p1,p2){}; delete x ; // 報(bào)錯(cuò)
// 不允許變量重名 "use strict"; function x(p1,p1){} // 報(bào)錯(cuò)
// 不允許使用八進(jìn)制 "use strict"; var x = 010; // 報(bào)錯(cuò)
// 不允許使用轉(zhuǎn)義字符 "use strict"; var x=