我對節點模塊中this
的行爲非常困惑。下面是相關片段:「this」在函數中的某個對象的函數中
module.exports = function(environment) {
var config = require('./config');
return {
config: config,
agencies: ["string1", "string2"],
getRoutes: function(callback) {
var API = "/api/route/";
this.agencies.forEach(function(agency) {
console.log(this.config); //Returns undefined??
}
}
}
}
望着MDN documentation on this說,在以物體的功能的this
指對象。然後我會期待console.log(this.config)
引用require'd config模塊。相反,目前尚不清楚this
最終是指什麼,除了它沒有「config」屬性。
顯然有一個範圍正在改變,但我不知道在哪裏。 forEach?我試圖只是console.log(this)
,但我收回了一個我無法破譯的巨大對象。
我不明白爲什麼配置超出此功能的範圍。這是怎麼回事?
裏面的'forEach'功能,你現在是在不同的上下文。所以,「這個」是不同的。 –
**每個**函數調用都會在被調用的函數內建立一個'this'的值,包括對'.forEach'處理函數每次迭代的調用。 – Pointy
注意:某些迭代器函數(例如['jQuery.each'](https://api.jquery.com/jQuery.each/))將建立一個自定義'this'上下文,例如被迭代的項目。但是,它仍然是一個*不同的函數執行上下文。 – user2864740