在《JavaScript 启蒙》一书中(链接指向预发布版本(第 85 页),但我有已发布版本(第 6.3 章),它说了同样的话),它说任何内部函数都将this
视为全局对象( window
) 在 ECMA-3 中,但将在 ECMA-5 中修复。
代码如下:
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,所以我在它们中尝试了上面的代码,它们仍然打印出 and 中的全局func2
对象func3
。然后我添加"use strict";
到func1
and 以防万一,还添加到func2
and func3
。代码: http: //jsfiddle.net/9GJhu/6/ 现在在 Chrome 和 node.js 中,this
将打印为undefined
,而不是myObject
. 所以按照书上的,this
应该是myObject
ECMA-5。上面的代码有什么问题?