在javaScript中有四种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。
我们先看以下代码:
console.log("=================")functionoutFunction1(){console.log("outFunction1this:",this);}outFunction1();console.log("=================")functionoutFunction2(){console.log("outFunction2this:",this);functioninnerFunction(){console.log("innerFunctionthis:",this);}innerFunction();}outFunction2();console.log("=================")varoutObject={name:"outObject",outFunction3:outFunction2}outObject.outFunction3();
结果:

从以上代码中我们发现,outFunction1函数内部this被绑定到全局对象上。outFunction3 是outObject对象的属性,outFunction2函数内部的this被绑定到outObject上。
我们知道函数作用域,一个函数相当于一个块级作用域。然而从以上代码中我们发现,innerFunction函数中的this被绑定到全局对象上。
《javaScript语言精粹》这本书上说这是一个设计的错误。但我们可以通过以下方法解决这个问题。

文章转载自猪蹄和它的小鱼干,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




