(function(){ var call = '23'; Function(console.log(call))(); //23
})();打印的是23(function(){
var call = '23';
Function('console.log(call)')(); //未定义
})();不明白为什么一个传入不带引号参数和带引号参数结果为什么不一样?
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
这么讲吧,首先明确一个东西,
(function(){ //code })();
这个是用来创建闭包的,这个不管。
然后直接看里面的。
Function是javascript所有函数的原型,可以通过
Function(args)的方法来创建一个函数。
在第一个例子里面,传递给Function函数的是console.log(call)
在闭包里面,call = "23",console.log会被立即执行,所以实际上执行的结果是
Function(undefined)(),
第二个例子的话,要先去看MDN,MDN上明确指出
闭包之内的变量不会被引用,因此这里虽然成功创建了一个函数
ƒ anonymous() { console.log(call) }
但是其并不具备call的作用域,在立即执行的时候会报call is undefined错误。
这个问题主要是关于Function的这一个特点
添加回答
举报
0/150
提交
取消