- 函數(shù)的作用域再函數(shù)定義時就已經(jīng)決定了,這是因?yàn)楹瘮?shù)有一個內(nèi)部屬性
[[scope]]
,當(dāng)函數(shù)創(chuàng)建時,就會保存其所有父變量對象到其中,可以理解為[[scope]]
就是所有父變量對象的層級鏈,但是注意:[[scope]]
并不代表完整的作用域鏈拣宏。
//例子
function foo() {
function bar(){
}
}
| 創(chuàng)建函數(shù)時各自的[[scope]]
為:
foo.[[scope]] = [
globalContext.VO;
];
bar.[[scope]] = [
fooContext.AO;
globalContext.VO;
];
- 由此可見 函數(shù)作用域是由[[scope]]組成的鏈?zhǔn)浇Y(jié)構(gòu)