JS 函数式基础

第一段代码


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()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。 官方这个解释我没明白 这个动态确定是什么时候确定的,以什么标准来确定的。 哪位经验丰富的朋友分享下,谢谢


摇曳的蔷薇
浏览 606回答 2
2回答

至尊宝的传说

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

慕田峪9158850

因为Function()构造函数定义的函数作用域需要动态确定,而不是在定义函数时确定的。说的挺清楚的1.定义函数function关键词的函数作用域是词法即刻确定的2.Function()构造函数定义的函数作用域是运行时动态确定的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript