作用域鏈
迷惑性**
var a = 100;
function test()
function testfun()
不假思索的想到 出書的一定是 200啊 ,然而結結實實被打臉,輸出 100
原因
在編譯時,迷惑性**全域性作用域中會存有的物件
testfun作用域中存的
test
在執行時,
test() 我這裡需要變數a 啊,但是在test的作用域中並不存在,那麼就需要去全域性作用域中尋找 a,報告老大找到了,輸出全域性作用域中的a,輸出100
var a = 100;
function testfun2()
test();
}testfun2();
輸出什麼? 300!
?!為什麼呢
作用域鏈再走一波
1.全域性作用域執行時test時,報告老大,我需要變數a ,test作用域:我沒有啊,你去看看testfun2有沒有;testfun2
test
testfun2作用域:我有 給你拿去好了;
輸出 300
嚴格模式
例項
'use strict';
x = 3.14; // 報錯(x 未定義)
'use strict'
myfunction();
function myfunction()
// 不允許刪除變數或物件
'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= \010; // 報錯
// 不允許對唯讀屬性賦值
'use strict';
var obj ={};
object.defineproperty(obj,'x',);
obj.x = 3.14;
// 不允許對乙個使用 getter方法讀取的屬性進行賦值
'use strict';
var obj =};
obj.x=3.14; // 報錯
// 變數名 不能使用 'eval'字串
'use strict';
var eval = 3.14; // 報錯
//變數名不能使用 'arguments'字串
'use strict';
var arguments = 3.14; //報錯
// 禁止 this 關鍵字指向全域性物件
function test()
嚴格模式新增的一些保留關鍵字 作用域 作用域鏈
理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用隔離變數,不同作用域下同名變數不會有衝突 區別1全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。而不是在函式呼叫時 ...
作用域和作用域鏈
全域性作用域 全域性的變數執行環境 函式作用域 函式內部的變數執行環境 每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。函式執行之後,棧將環境彈出,把控制權返回給之前的執行環境。全域性作用域只要頁面不解除安裝,就一直存在,不釋放。函式每次在呼叫時,都會形成乙個作...
作用域和作用域鏈
var a 10 function f1 x,y f1 console.log b 此時b輸出5,因為b 5為隱式的全域性變數 在函式外面使用var 宣告的變數都是全域性變數,作用範圍是程式執行的地方.全域性作用域 函式除外 函式的形參是區域性變數 在函式內部,不使用var 定義的變數,叫隱式全域性...