看一下这个例子:
<md-autocomplete md-no-cache="false" md-selected-item="selectedItem" md-search-text-change="searchLocation(searchText)"
md-search-text="searchText" md-items="item in searchResult" md-item-text="item.address"
md-selected-item-change="changeLocation(item)" md-min-length="0" md-floating-label="Your Address" ng-blur="unFocus()">
<md-item-template>
<span md-highlight-text="searchText" md-highlight-flags="^i">{{item.address}}</span>
</md-item-template>
<md-not-found>
<i>Not Found {{searchText}}</i>
</md-not-found>
</md-autocomplete>
为什么function aaa () {
console.dir(this)
}
function bbb () {}
aaa.apply(undefined, [1,2,3]) // this in aaa is `window` object
aaa.apply(bbb, [1,2,3]) // this in aaa is `bbb` function
在第一个应用案例中设置为this
,即使我试图强制它为window
?
答案 0 :(得分:5)
当不处于严格模式且null
或undefined
作为.apply()
的第一个参数传递时,this
将被设置为全局对象window
1}}在浏览器中。
在严格模式下,它会将this
设置为您传递的实际值。
一般来说,非严格模式试图容忍错误,甚至修复&#34;你自动犯了一些错误。这被证明有时是一个问题,因为应该立即编码错误的东西被掩盖了#34;由系统。严格模式的发明有很多原因,其中一个原因就是停止隐藏编码错误。
答案 1 :(得分:1)
因为如果您不在strict mode中,函数调用的工作原理。如果没有严格模式,函数的this
引用总是引用一个对象,如果没有给出其他对象,它将成为全局对象(即window
)。