在书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
。上面的代码有什么问题?