1

JS コード

    var foo = "Hello World!"; // <------- global scope
    document.write("<p>Before our anonymous function foo means '" + foo + '".</p>');

    (function() {
        // The following code will be enclosed within an anonymous function
        var foo = "Goodbye World!"; // <------- local scope
        document.write("<p>Inside our anonymous function foo means '" + foo + '".</p>');
    })(); // We call our anonymous function immediately

    document.write("<p>After our anonymous function foo means '" + foo + '".</p>');

HTML出力

Before our anomymous function foo means 'Hello World!".

Inside our anomymous function foo means 'Goodbye World!".

After our anomymous function foo means 'Hello World!".

私の問題は

  • 関数内の変数の値を置き換えると、fooなぜ置き換えられないのでしょうか? それはまだどのように含まれてい"Hello World!"ますか?
  • 関数内のグローバル変数にアクセスするにはどうすればよいですか?
4

3 に答える 3

3

関数内で使用var fooすることにより、その関数内でローカルにのみ変更するよう変数に明示的に指示します。グローバルに変更したい場合は、使用してくださいfoo = ...

それについて読みたい場合は、このSO質問をお勧めします

于 2013-02-07T17:30:43.260 に答える
1

無名関数からステートメントを削除するvarと、グローバル変数が変更されます。

var foo = "Hello World!"; // <------- global scope
document.write("<p>Before our anonymous function foo means '" + foo + '".</p>');

(function() {
    // The following code will be enclosed within an anonymous function
    foo = "Goodbye World!"; // <------- local scope
    document.write("<p>Inside our anonymous function foo means '" + foo + '".</p>');
})(); // We call our anonymous function immediately

document.write("<p>After our anonymous function foo means '" + foo + '".</p>');
于 2013-02-07T17:30:32.030 に答える
0

関数スコープ変数を使用してグローバル変数をシャドウイングしています。グローバル変数にアクセスするには、window.fooで明示的にそう言うことができます

var foo = "Hello World!"; // <------- global scope
document.write("<p>Before our anonymous function foo means '" + foo + '".</p>');

(function() {
    // The following code will be enclosed within an anonymous function
    var foo = "Goodbye World!"; // <------- local scope
    document.write("<p>Inside our anonymous function foo means '" + foo + '".</p>');
    document.write("<p>Inside our anonymous function window.foo means '" + window.foo + '".</p>');
    window.foo = window.foo + foo;
})(); // We call our anonymous function immediately

document.write("<p>After our anonymous function foo means '" + foo + '".</p>');

これにより、「Hello World!GoodbyeWorld!」が印刷されます。

于 2013-02-07T17:38:00.157 に答える