匿名函数如何在严格模式下解决默认绑定错误?

时间:2015-06-09 13:33:48

标签: javascript

当我们在严格模式下使用默认绑定时,全局对象不符合默认绑定的条件。然后,如果我们使用下面的代码,我们将遇到错误:

    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
})();

那么这段代码中的匿名函数如何解决全局对象问题并解决问题?

1 个答案:

答案 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();