Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разница между переменной с var и без, которые в глобальной области (https://javascript.ru/forum/misc/54356-raznica-mezhdu-peremennojj-s-var-i-bez-kotorye-v-globalnojj-oblasti.html)

zhurchik 14.03.2015 12:46

Разница между переменной с var и без, которые в глобальной области
 
Приветствую всех.
Вот я почитал о переменных и их областях видимости, по сути, понимаю как работают локальные переменные, а как глобальные, но мне не понятно, какая разница, если задать переменную с VAR вне функции или метода, а в глобальной видимости? Какая разница будет между переменной с VAR и без?

ruslan_mart 14.03.2015 13:13

zhurchik, без var - это не правильно, в старых браузерах или в строгом режиме будет вызвана ошибка.

zhurchik 14.03.2015 13:20

Ruslan_xDD,
То-есть, переменную вообще без var не рекомендуется писать?
А если я хочу задать глобальную переменную из функции?

Rise 14.03.2015 14:19

zhurchik,
Цитата:

А если я хочу задать глобальную переменную из функции?
А зачем это надо?

danik.js 14.03.2015 14:20

Цитата:

Сообщение от Ruslan_xDD
в старых браузерах ... будет вызвана ошибка.

Да вроде не будет. Будет только в старых IE, если на странице будет элемент с таким id. Но блин, какой смысл писать без var?

ruslan_mart 14.03.2015 15:33

danik.js, помню как-то забыл объявить переменную и в файрфоксе старом не работало, и долго гадал почему не работает. :)

Цитата:

Сообщение от zhurchik
А если я хочу задать глобальную переменную из функции?

Ну так задай:

var foo;

function myFunc() {
    foo = 'bar';
};

myFunc();
alert(foo);



function myFunc() {
    window.foo = 'bar';
};

myFunc();
alert(foo);


Но засирать глобал я бы вообще не рекомендовал.

hhh 14.03.2015 16:37

var message = 'За пределами функции';

    function warning() {
      var message = 'Внутри функции';
      alert(message); // Внутри функции
    }
    warning();
    alert(message) // За пределами функции


var message = 'За пределами функции';

    function warning() {
      message = 'Внутри функции';
      alert(message); // Внутри функции
    }
    warning();
    alert(message) // Внутри функции

Erolast 14.03.2015 18:56

Цитата:

То-есть, переменную вообще без var не рекомендуется писать?
Начиная с ES5 переменную без var запрещено объявлять.
'use strict';
dickLength = 10; //Exception: assignment to undeclared variable dickLength

nbq 14.03.2015 20:30

Разница в том, что перменную с var невозможно удалить в v8. В FF вроде удаляется.
var a = 1
b=2
console.log(delete a, delete b)

еще в старых ie ошибки были из-за этого, просто в силу тупизны самих движков ie, у них там "свой" M$ecmascript(TM):)

nbq 14.03.2015 20:38

Цитата:

Сообщение от Erolast
Начиная с ES5 переменную без var запрещено объявлять.

а если "use strict" убрать?

можно пруф, где написано, что запрещено?

В любом случае, обойти это легко, можно писать window.a=1, будет тоже самое, что без var.


Часовой пояс GMT +3, время: 01:45.