ключевое слово var и область действия функции javascript - PullRequest
2 голосов
/ 12 декабря 2011

Я хотел бы найти самый простой способ убедиться в области действия переменных.

В следующем примере ( jsfiddle ):

var foo = function() {
    var bar = function() {
        pub = "public";
        var pri = "private";

        alert(pub) // public
        alert(pri) // private
    };

    // alert(pub) // pub not defined
    bar();
    alert(pub) // public
    // alert(pri) // pri not defined
};

foo();
alert(pub) // public
// alert(pri) // pri not defined

МожетЯ говорю, что:

1.- Все переменные с префиксом ключевого слова var будут видны внутри его функции и все их вложенные функции?
2.- Все переменные без ключевого слова var будут видны вездепосле (его функциональный контейнер) будет выполнен?

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011
  1. Это правда, если только они не затенены другим внутренним определением той же переменной.
  2. Все переменные без var будут глобальными, если они уже не были определены внешней областью действия.

Поскольку люди упоминали глобальные переменные ...

Вы не должны использовать глобальные переменные, всегда объявляйте свои переменные с помощью var, чтобы избежать путаницы.Если вы должны их использовать, поместите их в глобальное пространство имен, используемое для вашего кода.Это поможет вам избежать коллизий с другим кодом на странице.

var ns = {};
// Now use this anywhere in your code
ns.myGlobal = 49;
1 голос
/ 13 декабря 2011

Да. Вы правильно поняли.

Думайте о любой переменной с ключевым словом «var» перед ней как о видимой для этой функции и ее вложенных функций. Думайте о любой переменной без ключевого слова «var» перед ней как о window.variable.

var foo = function() {
    var bar = function() {
        pub = "public";
        var pri = "private";

        alert(pub) // public
        alert(pri) // private
    };

    // alert(pub) // pub not defined
    bar();
    alert(pub) // public
    alert(pri) // pri not defined
};

foo();
alert(pub) // public
alert(pri) // pri not defined

Как правило, вы не должны использовать глобальные переменные.

0 голосов
/ 13 декабря 2011

Проверьте это для большей ясности ...

var foo = function() {
    var pri = "OUTER";// this is what I changed...
    var bar = function() {
        pub = "public";
        var pri = "private";

        alert(pub) // public
        alert(pri) // private
    };

    // alert(pub) // pub not defined
    bar();
    alert(pub) // public
    alert(pri) // pri not defined
};

foo();
alert(pub) // public
alert(pri) // pri not defined
...