-2

次の()は何をしますか?()内の内容を印刷しているようです。

(function() {
    console.log("test");
});

ExtJS4がバージョンを定義する方法は次のとおりです。

(function() {

// Current core version
var version = '4.1.1', Version;
    Ext.Version = Version = Ext.extend(Object, {
    ...
});
4

4 に答える 4

9

コードを誤ってコピーしたと想定する必要があります。

これは何もしません
(function() {
console.log("test");
});
これにより、コンソールに「テスト」が書き込まれます
(function() {
console.log("test");
}());

あなたが尋ねているように見える本当の質問は、なぜです。

function () {...}新しい無名関数を定義します。

function () {...}()匿名関数を呼び出します

(function () {...}());parensは、関数の実行を強制するために使用されます。ある種の演算子がないと、JSインタープリターはSyntaxErrorをスローします。

誰かがすぐに呼び出される関数式をコードにインラインで配置する理由は、新しい変数スコープを導入するためです。JavaScriptでは、ブロックにスコープがないため、問題を認識していない新しい開発者にとっては非常に紛らわしいエラーが発生する可能性があります。

さらに、関数をラッパーとして使用するvarと、function宣言がグローバル名前空間を汚染するのを防ぎ、代わりにIIFE内で非公開に保持されます。これはAGoodThing™です。


追加情報を与えられたJAny投稿:

「これがExtJS4がバージョンを定義する方法です」
(function() {

// Current core version
var version = '4.1.1', Version;
    Ext.Version = Version = Ext.extend(Object, {
    ...
});

投稿されたコードは不完全です。中括弧と親は正しく一致していませんでした。

終わりはnot});に属します。Ext.extend(Object, { (function () {

于 2012-10-29T18:44:40.620 に答える
7

匿名関数またはその中の他のシンボルが公開されていないため、コードが呼び出されることはありません。

最後に追加()すると、それは自己呼び出し無名関数であり、通常、コードの残りの部分にアクセスできないいくつかのローカル変数を作成するために使用されます

(function() {
console.log("test");
})();

Ext-JSが意味をなすコードの理由は、匿名関数内の一部のコードを呼び出して外部で利用できるようにしているためです。

Ext.Version = Version = Ext.extend(Object, ...

また、サンプルのExt-JSコードにタイプミスがあります。彼らのコードは実際には次のとおりです

(function() {
    // Current core version
    var version = '4.1.1', Version;
    // Exposes our local Version into the global Ext.Version object
    Ext.Version = Version = Ext.extend(Object, {
    //... More code
    });   
}()) // See the brackets after the function? That runs the code above immediately
于 2012-10-29T18:41:32.833 に答える
2

実際、それだけでは何も起こりません。これは匿名関数を定義しますが、後で参照したり呼び出したりすることはできません。

ただし、これは次のとおりです。

(function() {
console.log("test");
})();

匿名関数を定義して呼び出し、コンソールに「test」を出力します。最初のビットは質問のビットと同じで、最後のビットは()関数を呼び出します。

于 2012-10-29T18:42:50.950 に答える
1

何もしません。括弧で囲まれた関数式です。それらがないと、エラーが発生します。

于 2012-10-29T18:42:03.157 に答える