1

私は多くの投稿を読み、javascript の匿名の自己実行関数について質問/回答していますが、まだ要点を見逃しているのではないかと心配しています。このコードで myvar 値が表示されるのはなぜですか? コンストラクト (function(){ code })() は、すべての変数を外部から見えないようにするべきではありませんか?

(function(){
    myvar = 5;
})();

alert(myvar);

上記のコードとの違いは何ですか

function myfunction(){
    myvar = 5;
};
myfunction();

alert(myvar);

?

4

3 に答える 3

3

myvarウィンドウスコープで定義されているため、すべての人がアクセスできます。

myvarプライベートに保ちたい場合は、次のようにスコープする必要がありvarます。

(function(){
    var myvar = 5;
})();
于 2013-01-05T17:09:42.593 に答える
2

変数は、javascript の関数レベルでスコープされます。つまり、ループまたは if ステートメント内で変数を宣言すると、関数全体で使用できるようになります。

あなたの場合、誰かがすでに指摘したように、あなたの myVar はウィンドウ全体で利用できます。

関数スコープ内で変数を明示的にケージする必要がある場合は、匿名関数を作成してすぐに実行すると、内部のすべての変数が関数にスコープされます

(function(){
    var myvar = 5;
})();


alert(typeof(myVar));

結果は「未定義」

于 2013-01-05T17:16:14.227 に答える
2

で「myvar」を宣言できませんでしたvar

次のように変更するとどうなるか見てみましょう。

(function(){
    "use strict";
    myvar = 5;
})();
于 2013-01-05T17:10:02.110 に答える