Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.03.2015, 12:46
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

Разница между переменной с var и без, которые в глобальной области
Приветствую всех.
Вот я почитал о переменных и их областях видимости, по сути, понимаю как работают локальные переменные, а как глобальные, но мне не понятно, какая разница, если задать переменную с VAR вне функции или метода, а в глобальной видимости? Какая разница будет между переменной с VAR и без?
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2015, 13:13
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

zhurchik, без var - это не правильно, в старых браузерах или в строгом режиме будет вызвана ошибка.
Ответить с цитированием
  #3 (permalink)  
Старый 14.03.2015, 13:20
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

Ruslan_xDD,
То-есть, переменную вообще без var не рекомендуется писать?
А если я хочу задать глобальную переменную из функции?
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2015, 14:19
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 912

zhurchik,
Цитата:
А если я хочу задать глобальную переменную из функции?
А зачем это надо?
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2015, 14:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Ruslan_xDD
в старых браузерах ... будет вызвана ошибка.
Да вроде не будет. Будет только в старых IE, если на странице будет элемент с таким id. Но блин, какой смысл писать без var?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2015, 15:33
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 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);


Но засирать глобал я бы вообще не рекомендовал.
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2015, 16:37
hhh hhh вне форума
Профессор
Отправить личное сообщение для hhh Посмотреть профиль Найти все сообщения от hhh
 
Регистрация: 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) // Внутри функции
Ответить с цитированием
  #8 (permalink)  
Старый 14.03.2015, 18:56
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
То-есть, переменную вообще без var не рекомендуется писать?
Начиная с ES5 переменную без var запрещено объявлять.
'use strict';
dickLength = 10; //Exception: assignment to undeclared variable dickLength
Ответить с цитированием
  #9 (permalink)  
Старый 14.03.2015, 20:30
nbq nbq вне форума
Интересующийся
Посмотреть профиль Найти все сообщения от nbq
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2015, 20:38
nbq nbq вне форума
Интересующийся
Посмотреть профиль Найти все сообщения от nbq
 
Регистрация: 14.03.2015
Сообщений: 10

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

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2d карусель, работает, но уверен - неоптимально. alko Ваши сайты и скрипты 22 21.07.2014 14:59
Jin: И снова о наследовании tenshi Ваши сайты и скрипты 16 19.08.2013 20:30
Разбор палитры изображений SSinn Events/DOM/Window 1 11.06.2013 02:26
Скроллинг клавишами и липкие блоки bes Общие вопросы Javascript 11 12.06.2012 22:08
Проблема с обработкой OnClick suslik90 Events/DOM/Window 1 11.05.2012 21:09