为什么这段代码在"严格模式"下抛出undefined

Und*_*ker 2 javascript

为什么这个代码会抛出undefined

function Obj() {
   this.a = 12;
   this.b = "a";
   this.privilegedMethod = function () {
      this.a++;
      privateMethod();
   };

   function privateMethod() {
     this.b = "foo";
     console.log(this.b);
   }
}
Run Code Online (Sandbox Code Playgroud)

调用如下所示的函数,在"严格模式"中抛出... undefined.

var a = new Obj();
console.log(a.privilegedMethod());
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 5

thisJavaScript中的值是根据函数的调用方式设置的.这是"背景".

当你a.privilegedMethod(),你正在呼唤privilegedMethod()的"背景" a.在里面,那个方法,this将是a.

当你打电话时privateMethod(),没有"背景".在严格模式之外,this将是window,但在严格模式下它是undefined.

试试这个:privateMethod.call(this);.