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

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

打印的是23

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

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


慕田峪7331174
浏览 897回答 1
1回答

米琪卡哇伊

这么讲吧,首先明确一个东西,(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的这一个特点
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript