为了账号安全,请及时绑定邮箱和手机立即绑定

JS 函数式基础

JS 函数式基础

摇曳的蔷薇 2019-03-04 15:15:43
第一段代码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 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

词法作用域和动态作用域,犀牛书写的很详细了

https://img1.sycdn.imooc.com//5c9340650001b9aa07190756.jpg

查看完整回答
反对 回复 2019-03-21
?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

因为Function()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。
说的挺清楚的
1.定义函数function关键词的函数作用域是词法即刻确定的
2.Function()构造函数定义的函数作用域是运行时动态确定的

查看完整回答
反对 回复 2019-03-21
  • 2 回答
  • 0 关注
  • 605 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号