js 作用域 :
1、js 没有块作用域 :
for (var i = 0;i < 4; i++){ } alert(i) // i = 3
2、js 没有动态作用域:
function f1(){
var x = 10;
f();
}
function f(){
alert(x)
} f1(); // x is not defined
3、词法作用域(静态作用域 或者 叫 闭包)作用域链
function main(){
function sub1(){
function sub2(){
}
}
} // sub2.Lexcal -> sub2.{[Scope] = sub1} -> sub1.Lexcal -> sub1{[scope]} -> main.Lexcal ->window === main{[scope]}
补充: 词法创建函数的四种方法:
//---- 01: ----
function f(){} //---- 02: ---- var f = function() {} //---- 03: ---- var f = function x() {} //---- 04: ---- var f = new Function("","alert("is function")"); // 这样的词法创建的function,不能访问到外部的 lexical 而是直接访问window