В книге JavaScript Enlightenment (ссылка на предварительно опубликованную версию (стр. 85), но у меня есть опубликованная версия (глава 6.3), и она говорит то же самое), она говорит, что любая внутренняя функция будет обрабатывать this
как глобальный объект (window
) в ECMA-3, но будет установлен в ECMA-5.В JavaScript, будет ли какая-либо автономная внутренняя функция рассматривать это «как», в качестве объекта, на который был вызван исходный метод?
код ниже:
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
. Так, согласно книге, this
должен быть myObject
в ECMA-5. Что не так в коде выше?