在書JavaScript Enlightenment(鏈接是一個預先發布的版本(第85頁),但我有已發佈的版本(第6.3章),它說同樣的事情),它說任何內部函數將把this
視爲ECMA-3中的全局對象(window
),但將在ECMA-5中修復。在JavaScript中,任何獨立的內部函數都將「this」當作原始方法被調用的對象嗎?
的代碼如下:
http://jsfiddle.net/javascriptenlightenment/9GJhu/
var myObject = {
func1: function() {
console.log(this); // logs myObject
var func2 = function() {
console.log(this) // logs window, and will do so from this point on
var func3 = function() {
console.log(this); // logs window, as it’s the head object
}();
}();
}
}
myObject.func1();
但我認爲目前的Chrome,Firefox和node.js中應實現ECMA-5在很大程度上,所以我嘗試以上代碼,他們仍然打印出func2
和func3
中的全局對象。然後我將"use strict";
加到func1
,以防萬一,也加到func2
和func3
。代碼:http://jsfiddle.net/9GJhu/6/現在在Chrome和node.js中,this
將作爲undefined
而不是myObject
打印出來。所以根據這本書,在ECMA-5中this
應該是myObject
。上面的代碼有什麼問題?