Q : 在浏览器中执行如下的代码片段,请写出运行结果。
var i = 5;
function test(){
var i = 4;
var innerFunction = new Function('console.log(i);');
innerFunction();
}
test();
如果你不清楚这道题考察的知识点,凭瞎蒙可能很多人会觉得答案是 4。
那么我们就一起来见证它的执行结果吧
web前端学习扣qun:584226069免费领取全套教学视频资料!结果居然是5!
web前端学习扣qun:584226069免费领取全套教学视频资料!这道题其实考察的是 "Function" 构造函数的性质,如果我们使用 new Function(...)来构造一个 function ,那么该 function 实际上是一个匿名函数,而匿名函数内部的 this 是指向全局的,在浏览器中也就是 window 对象。到这里,结果就不言而喻了,"console.log(i)"中的变量 “i”自然是到全局中去搜索, 输出结果就是 5 。
但是!!!!!!!!!!!!!!!
web前端学习扣qun:584226069免费领取全套教学视频资料!为什么问题特别强调了“在浏览器中执行”呢?如果在nodejs 环境中执行包含上述代码的一个js文件,会得到什么结果呢?
在这里偷偷告诉大家:结果是:
ReferenceError: i is not defined
至于这是为什么呢?那就读者自己去体会吧!
web前端学习扣qun:584226069免费领取全套教学视频资料!PS : 如果这篇文章让你有所收获,别忘了点赞并关注哦,批评指正,每天积累一点,让我陪你在大牛的路上越走越远!
网友评论