2017-05-10 36 views
0

我有库代码做了一个简单的函数分配。该功能可以从全局范围访问。为什么在全局范围内使用“严格的”命名空间中的break函数分配?

当我在文件的开头添加"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是上一行声明?

+0

这一点已经在这里找到答案。 http://stackoverflow.com/questions/7290086/javascript-use-strict-and-nicks-find-global-function –

+0

是的,'a'被声明,但它被分配给'this',它在严格模式下是未定义的 – hindmost

回答

1

全球泄漏

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

所以你不必一个这个,但你的一个未定义,所以你不能让b未定义

相关问题