5

このようなオブジェクトがあると、次の警告/ヒント/エラーが発生します。

(
    function global(){...};
    function moreFunctions(){...};
)(this);

「トップレベルの「this」式。この検査では、オブジェクトリテラルまたはコンストラクター本体の外部で発生するJavascriptの「this」式のインスタンスが報告されます。このような式は正当なJavascriptであり、トップレベルの「グローバル」Javascriptオブジェクトを参照しますが、主に使い物にならない。" (InspectionJSによる)

ちなみに、jQueryは。(window)の代わりにと同じです(this)

それが何を意味するのかわかりません。私が知っているのは、最初(と2番目の間のすべて)がオブジェクトであるということだけですが、その追加は何ですか?

JSライブラリソースを発見したばかりで、それが既存のスクリプトに含まれていると、どういうわけかすべてが機能しなくなるため、これに取り掛かりました。その部分を削除しても(this);、ページはクラッシュしませんでした。しかし、ライブラリは機能しませんでした。

4

3 に答える 3

7

あなたが抱えている問題について100%確信はありませんが、JQueryソースからのレッスンに関するPaulIrishのビデオから私が学んだことを説明させてください。

(function(window, undefined) {
})(this);

これは、自己実行関数として知られています。関数定義は括弧で囲まれています。(Javascriptでは、ほとんどの場合、何でも角かっこで囲むことができます)。次に、2番目()はすぐに関数を呼び出します。

だからそれは次のようになります

function my_func(window, undefined){...}
my_func(this);

ここで、通常を説明するために、this.プログラム全体をこのような自己実行関数でラップします。while呼び出し、およびwindowとundefinedは、コードスペースを共有するときのエッジケースのthis修正にすぎません。たとえば、誰かが次のようなものを置くことができます

window = 0;
//or
undefined = 1;

突然、私たちが依存しているこれらの非常に重要なグローバル変数が壊れます。これをトップレベルで使用すると、ウィンドウ変数が内部関数に返されます。また、2番目の変数を関数に渡さないため、undefinedは正しい値に戻ります。

これがすべてお役に立てば幸いです。

于 2012-11-07T19:16:14.097 に答える
5

this関数の外で使用していると不平を言っています。

関数内での使用はthis(一般的に)プログラマーが関数をメソッドとして意図したことを意味します(thisメソッドが呼び出されるオブジェクトはどこにありますか)が、関数の外では、それは奇妙なことです。

メソッド呼び出しで使用されていないときにグローバルオブジェクトwindowを暗黙的に参照するという事実に依存するのではなく、グローバルオブジェクトを明示的に参照するように記述する方が適切です。this

于 2012-11-07T19:12:03.293 に答える
1

これにより、コードのチャンク全体が、独自のスコープを持つすぐに実行される関数に配置されます。

例えば:

(function(w){
    var apple = 'apple';
})(window);

alert(apple); //undefined
于 2012-11-07T19:09:31.580 に答える