为什么"使用严格"将命名空间内的函数分配到全局范围?

时间:2017-05-10 10:02:53

标签: javascript strict javascript-namespaces

我有库代码做一个简单的函数赋值。可以从全局范围访问此函数。

当我在文件开头添加"use strict"时,我在TypeError: a is undefined分配时收到错误a.b



"use strict"; /* Remove this and 'a' is defined */
(function() {
  var a = this;
  a.b = function() {
    document.getElementById('test').innerHTML = 'abc';
  };
})();
b();

<div id="test"></div>
&#13;
&#13;
&#13;

考虑到在前一行声明var a,为什么会出现此错误?

1 个答案:

答案 0 :(得分:1)

  

全球泄漏

     

有很多情况可能会导致这种情况发生   全球对象。例如,如果您忘记提供新的   调用构造函数时的前缀,构造函数是这个   将意外绑定到全局对象,因此而不是   初始化一个新对象,它将默默地篡改   全局变量。在这些情况下,严格模式将绑定   这到undefined,这将导致构造函数抛出一个   异常,允许更快地检测到错误。

所以你没有 a 作为这个,但你的 a 未定义,所以你无法制作 b 未定义