【问题标题】:Why does "use strict" break function assignment inside namespace to global scope?为什么“使用严格”将命名空间内的函数分配中断到全局范围?
【发布时间】:2017-10-08 21:53:59
【问题描述】:

我有库代码做一个简单的函数分配。该函数是从全局范围访问的。

当我在文件开头添加"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>

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

【问题讨论】:

标签: javascript strict javascript-namespaces


【解决方案1】:

全球泄露

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

所以你没有 a 作为 this,但你的 aundefined,所以你不能b未定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多