今日、友人が次のコードに遭遇したと言い、その理由を説明してもらいました
var name = "ウィンドウ";
var object = {
name : "My Object",
getNameFunc : function(){
return function( ){
これを返します;
}
};
alert(object.getNameFunc()()); js は動的に決定され、それをどのように呼び出すかは直接的な関係があります。
簡単に言えば、関数を呼び出すときに「object.function name」メソッドを使用する場合、これは . (ドット) の前のオブジェクトであり、それ以外の場合はウィンドウです。
たとえば、object.getNameFunc() を呼び出すと、getNameFunc 関数本体の this は、宣言したばかりのオブジェクトになります。
コード をコピーすると、コードは次のようになります: var func = object。 getNameFunc;
func();
このとき、getNameFunc 関数本体の this は window ですが、同じ関数を呼び出す場合の違いがこの違いを決定します。
同様に、object.getNameFunc() は関数参照を返します。括弧を追加すると、関数を実行できます。実際、これは次のコードと同等です
var func = object.getNameFunc( );
alert( func() );
関数を実行するときは、次のようになります。ウィンドウを開くと、結果は明らかです。
今後、これについての記事を書きます。皆さんも私の CSDN ブログ tt361 をフォローしてください。