第一段代码
var n = 1; //全局变量,作用域为当前文档
function f() {
var n = 2; //局部变量,作用域仅限于函数体内
var e = function () { //使用function 语句定义的函数结构体
return n; //检查变量n到底返回什么值
};
console.log(e());//2
return e; //返回函数结构
}
console.log(f());//调用外层函数 调用f()相当于调用e;
console.log(f()());//调用外层函数 调用f()()相当于调用e();//2
第二段代码
var n = 1; //全局变量,作用域为当前文档
function f() {
var n = 2; //局部变量,作用域仅限于函数体内
var e = new Function("return n;");//使用Function构造函数定义的函数结构体
console.log(e());//1
return e; //返回函数结构
}
console.log(f());//调用外层函数 调用f()相当于调用e;
console.log(f()());//调用外层函数 调用f()()相当于调用e();//1
第一段和第二段 var e 赋值不一样,前者把函数作为直接量赋值给变量,后者是new的构造函数,最后两段代码结果不一样。别分是2和1。我在查阅资料是,有官方解释是这样的:因为Function()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。 官方这个解释我没明白 这个动态确定是什么时候确定的,以什么标准来确定的。 哪位经验丰富的朋友分享下,谢谢
词法作用域和动态作用域,犀牛书写的很详细了