当我们在严格模式下使用默认绑定时,全局对象不符合默认绑定的条件。然后,如果我们使用下面的代码,我们将遇到错误:
function foo() {
"use strict";
console.log( this.a );
}
var a = 2;
foo(); // TypeError: `this` is `undefined`
但是当我们使用匿名函数作为Call-Site时,错误消失了。
function foo() {
console.log( this.a );
}
var a = 2;
(function(){
"use strict";
foo(); // 2
})();
那么这段代码中的匿名函数如何解决全局对象问题并解决问题?
答案 0 :(得分:3)
将'use strict'
添加到IIFE并未改变foo
的行为,从'use strict'
删除foo
。
正如上面的评论所解释的那样,Strict mode的作用域是它所输入的函数。
这些示例的行为与第一个示例相同。
function foo() {
'use strict';
console.log( this.a );
}
var a = 2;
(function(){
foo(); // 2
})();
function foo() {
'use strict';
console.log( this.a );
}
var a = 2;
(function(){
'use strict';
foo(); // 2
})();
这些将与第二个例子的行为相同。
function foo() {
console.log( this.a );
}
var a = 2;
(function(){
foo(); // 2
})();
function foo() {
console.log( this.a );
}
var a = 2;
foo();