`Function(' return this')`和`function(){return this}`之间的区别是什么?

时间:2018-03-21 21:47:47

标签: javascript

在许多已编译的Javascript模块中,序言中的某处有一个调用Function('return this')()来获取全局对象。我在解释器环境中工作,出于安全原因禁止使用Function构造函数(以及eval)。我用(function(){return this})()替换了上面的代码,一切似乎都在起作用。

这是一个安全的替代吗?有没有失败的情况?为什么大多数编译的JS模块都更喜欢构造函数版本?

2 个答案:

答案 0 :(得分:3)

strict mode中你没有获得全局对象;你会得到undefined



console.log( window === function(){
  return (function(){return this})();
}() ); // true

console.log( window === function(){
  "use strict";
  return (function(){return this})();
}() ); // false




Function构造函数转义严格模式,因此无论您是否已处于严格模式,都可以得到相同的结果:



console.log( window === function(){
  return Function('return this')();
}() ); // true

console.log( window === function(){
  "use strict";
  return Function('return this')();
}() ); // true




答案 1 :(得分:0)

在第一种情况下,Function('return this')()在全局范围内声明,并且在非严格模式下,如果调用该函数而未设置此值,则this将链接到全局对象。

在第二种情况(function(){return this})()中,您正在创建立即调用的函数表达式。