第一段代码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()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。 官方这个解释我没明白 这个动态确定是什么时候确定的,以什么标准来确定的。 哪位经验丰富的朋友分享下,谢谢
2 回答
慕田峪9158850
TA贡献1794条经验 获得超8个赞
因为Function()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。
说的挺清楚的
1.定义函数function关键词的函数作用域是词法即刻确定的
2.Function()构造函数定义的函数作用域是运行时动态确定的
添加回答
举报
0/150
提交
取消

