0

Javascriptで、関数の外部でjavascriptのvarを使用して変数を宣言すると

var foo = 1;
var bar = 2;

function someFunction() {
    ....
}

それらの変数はドキュメントまたはウィンドウのスコープ内にありますか?さらに、なぜこれが重要なのでしょうか。varなしで変数を宣言すると、その変数はグローバルになることを私は知っています。

変数がドキュメントまたはウィンドウのスコープ内にあるかどうかをテストする簡単な方法はありますか?

4

4 に答える 4

3

var変数のスコープをそれが定義された関数に制限するので、トップレベルで定義された変数varは事実上グローバルスコープを持ちます。

スコープが設定されていない変数に値を割り当てると、var定義した場所に関係なく、その値はグローバルになります。

ここにjavascriptスコープに関する良い記事があります:JavaScriptの変数のスコープは何ですか?

于 2012-05-19T17:35:18.770 に答える
2

JavaScriptで関数を宣言すると、スコープが作成されます。

変数を宣言するときは、。が必要varです。はvar、それが属するスコープとそれが表示される場所を決定します。がない場合var、それは変数への「割り当て」であり、ブラウザはその名前の変数が外部スコープに存在すると想定します。

割り当てが発生すると、ブラウザはグローバルスコープに到達するまで外側を検索します。ブラウザが割り当てられた変数をグローバルスコープで認識しない場合、ブラウザはそれをグローバルスコープで宣言します(これは適切ではありません)

たとえば、実際の機能ではなく、スコープの可視性のデモとして以下を取り上げます。

//global variables
var w = 20
var x = 10

function  foo(){
    function bar(){

        //we assign x. since it's not declared with var
        //the browser looks for x in the outer scopes
        x = 0;

        function baz(){

            //we can still see and edit x here, turning it from 0 to 1
            x = 1;

            //redeclaring a variable makes it a local variable
            //it does not affect the variable of the same name outside
            //therefore within baz, w is 13 but outside, it's still 20
            var w = 13;

            //declaring y inside here, it does not exist in the outer scopes
            //therefore y only exists in baz
            var y = 2;

            //failing to use var makes the browser look for the variable outside
            //if there is none, the browser declares it as a global                
            z = 3;
        }
    }
}

//w = 20         - since the w inside was "redeclared" inside 
//x = 1          - changed since all x operations were assigments
//y = undefined  - never existed in the outside 
//z = 3          - was turned into a global
于 2012-05-19T17:37:52.880 に答える
1
var foo = 1;

window.foo === foo;

JavaScriptは関数型言語であるため、関数のスコープ内で宣言された変数は、その関数でのみ使用できます。

JSは実際に各関数スコープを調べ、宣言された変数を探します。

function setGlobal() {
    bar = 1; // gets set as window.bar because setGlobal does not define it
}
setGlobal();

// logs true and 1
console.log(window.bar === bar, bar); ​

http://jsfiddle.net/kXjrF/

それで...

function logGlobal() {
    var bar;
    console.log( foo, window.foo ) // undefined, undefined
    function setGlobal() {
        // window.foo is now set because logGlobal did not define foo
        foo = 1;  
        bar = 2; // logGlobal's bar not window.bar
        function makePrivate() {
           var foo = 3; // local foo
           console.log( foo ); // logs 3
        }
        makePrivate(); // logs 3
    }
    setGlobal();
    console.log( foo, window.foo ); // logs 1, 1

}
于 2012-05-19T17:35:31.140 に答える
0

JavaScriptには関数スコープしかないため、varキーワードで定義された変数は、それを含む関数にスコープされます。

ブラウザで(またはコードで直接)JavaScriptコンソールを開き、次のように入力することで、グローバルスコープを簡単に確認できます。

varRef && console.log(varRef)
于 2012-05-19T17:41:54.737 に答える