14.03.2015, 12:46
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
Разница между переменной с var и без, которые в глобальной области
Приветствую всех.
Вот я почитал о переменных и их областях видимости, по сути, понимаю как работают локальные переменные, а как глобальные, но мне не понятно, какая разница, если задать переменную с VAR вне функции или метода, а в глобальной видимости? Какая разница будет между переменной с VAR и без?
|
|
14.03.2015, 13:13
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
zhurchik, без var - это не правильно, в старых браузерах или в строгом режиме будет вызвана ошибка.
|
|
14.03.2015, 13:20
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
Ruslan_xDD,
То-есть, переменную вообще без var не рекомендуется писать?
А если я хочу задать глобальную переменную из функции?
|
|
14.03.2015, 14:19
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 912
|
|
zhurchik,
Цитата:
|
А если я хочу задать глобальную переменную из функции?
|
А зачем это надо?
|
|
14.03.2015, 14:20
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Ruslan_xDD
|
в старых браузерах ... будет вызвана ошибка.
|
Да вроде не будет. Будет только в старых IE, если на странице будет элемент с таким id. Но блин, какой смысл писать без var?
__________________
В личку только с интересными предложениями
|
|
14.03.2015, 15:33
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
danik.js, помню как-то забыл объявить переменную и в файрфоксе старом не работало, и долго гадал почему не работает.
Сообщение от zhurchik
|
А если я хочу задать глобальную переменную из функции?
|
Ну так задай:
var foo;
function myFunc() {
foo = 'bar';
};
myFunc();
alert(foo);
function myFunc() {
window.foo = 'bar';
};
myFunc();
alert(foo);
Но засирать глобал я бы вообще не рекомендовал.
|
|
14.03.2015, 16:37
|
Профессор
|
|
Регистрация: 19.11.2013
Сообщений: 150
|
|
var message = 'За пределами функции';
function warning() {
var message = 'Внутри функции';
alert(message); // Внутри функции
}
warning();
alert(message) // За пределами функции
var message = 'За пределами функции';
function warning() {
message = 'Внутри функции';
alert(message); // Внутри функции
}
warning();
alert(message) // Внутри функции
|
|
14.03.2015, 18:56
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
То-есть, переменную вообще без var не рекомендуется писать?
|
Начиная с ES5 переменную без var запрещено объявлять.
'use strict';
dickLength = 10; //Exception: assignment to undeclared variable dickLength
|
|
14.03.2015, 20:30
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Разница в том, что перменную с var невозможно удалить в v8. В FF вроде удаляется.
var a = 1
b=2
console.log(delete a, delete b)
еще в старых ie ошибки были из-за этого, просто в силу тупизны самих движков ie, у них там "свой" M$ecmascript(TM)
Последний раз редактировалось nbq, 14.03.2015 в 20:42.
|
|
14.03.2015, 20:38
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Сообщение от Erolast
|
Начиная с ES5 переменную без var запрещено объявлять.
|
а если "use strict" убрать?
можно пруф, где написано, что запрещено?
В любом случае, обойти это легко, можно писать window.a=1, будет тоже самое, что без var.
|
|
|
|