本JavaScript Enlightenment (リンクは公開前のバージョン (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 を大幅に実装する必要があると考えたので、それらで上記のコードを試してみましたが、依然としてfunc2
および内のグローバル オブジェクトが出力されますfunc3
。次に、念のため、and にも追加"use strict";
しました。コード: http://jsfiddle.net/9GJhu/6/ Chrome と node.js では、はではなくとして出力されます。したがって、本によると、ECMA-5にあるはずです。上記のコードで何が間違っていますか?func1
func2
func3
this
undefined
myObject
this
myObject