构造函数Function()参数传入带引号参数和传入不带引号参数对局部变量对外部变量是怎么操作的?

(function(){
        var call = '23';
       Function(console.log(call))(); //23
    })();

打印的是23

(function(){
        var call = '23';
       Function('console.log(call)')(); //未定义
    })();

不明白为什么一个传入不带引号参数和带引号参数结果为什么不一样?

阅读 1.8k
1 个回答

这么讲吧,首先明确一个东西,

(function(){ 
    //code
})();

这个是用来创建闭包的,这个不管。
然后直接看里面的。

Function是javascript所有函数的原型,可以通过
Function(args)的方法来创建一个函数。

在第一个例子里面,传递给Function函数的是console.log(call)
在闭包里面,call = "23",console.log会被立即执行,所以实际上执行的结果是
Function(undefined)(),

第二个例子的话,要先去看MDN,MDN上明确指出
clipboard.png
闭包之内的变量不会被引用,因此这里虽然成功创建了一个函数

ƒ anonymous() {
console.log(call)
}

但是其并不具备call的作用域,在立即执行的时候会报call is undefined错误。

这个问题主要是关于Function的这一个特点

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题