LINUX.ORG.RU

Почему не следует использовать var в global

 


0

1

Наверное, многие думают, что объявленная в global переменная с var отличается от той что без var только тем, что имеет скрытое св-во dontdelete. Я выяснил, что в node, помимо этого, она не копируется в global. Возможно, еще где-нибудь. Это значит, к примеру, что она не будет доступна через конструкцию for(i in global). Поэтому, в общем случае, не стоит объявлять через вар в глобальной области. Объявляя без вар мы ничего не теряем. Но не наоборот. Так что это тупой базворд, не надо слушать этих умников от CS.

многие думают что в ноде глобальная и модульная области видимости вообще здорово отличаются. Подумай над этим.

dib2 ★★★★★
()
Ответ на: комментарий от anonimous

Похапешнику по призванию этого не понять. Все разжевано в документации, проведи время с пользой - rtfm.

anonymous
()
Ответ на: комментарий от anonymous

Я не похапешник, хотя ничего против PHP не имею. Дай хотя бы наметку, по какой теме искать. А иначе, это выглядит так, что ты брякнул что-то, чего сам не понимаешь.

anonimous
() автор топика
Ответ на: комментарий от anonimous
var x = 5;

это не глобальная переменная, это переменная модуля. глобальные:

x = 5;
global.y = 7;
т.е. по-сути можешь рассматривать каждый js-файл в ноде как обернутый в (function(){})()

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Ну и что? Ты же не имееш цели, чтобы из модуля у тебя в глобальную область переменные скопировались? они должны быть локальными для модуля, так же как и для (function(){}()) Тут через var. А я говорю о глобальной области.

anonimous
() автор топика

Вот жабоскрипт уродский.

anonymous
()
Ответ на: комментарий от dib2

Я смотрю, чтение доков не излечивает от беспрбудной тупости. Лучше воздержусь.

anonimous
() автор топика

Глобальные переменные в правильно написанной программе не нужны.

А ещё разупорись, с помощью var глобальную переменную не объявить.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Строго говоря, она и есть глобальная переменная, семантически. без var — это свойство, все равно, что global.something=

anonimous
() автор топика
Ответ на: комментарий от PolarFox

В JS без глобальных переменых ты не обойдешься. Выражение var a = function(){} — это запись безымянной ф-ции в глобальную переменную. Ты в любом случае записываешь либо в глобальную переменную, либо в глобальный объект. Покажи ка мне кусок, где ты можешь этого избежать. Минимизировать можешь, да.

anonimous
() автор топика
Ответ на: комментарий от anonimous

А на верхнем уровне var нужен хотя бы затем, чтобы потом можно было скопировать кусок кода в неймспейс/модуль/любую другую ограниченную область видимости, и код при этом не засорял глобальный скоп.

Ни разу не видел конструкцию вида for i in global и не могу представить ситуацию где это было бы полезно.

Ещё не знаю справедливо ли это для js-движков, но в lua, который весьма близок к js в этом плане, настоящие глобальные переменные тупо медленнее локальных.

PolarFox ★★★★★
()
Последнее исправление: PolarFox (всего исправлений: 1)
Ответ на: комментарий от PolarFox

А на верхнем уровне var нужен хотя бы затем, чтобы потом можно было скопировать кусок кода в неймспейс/модуль/любую другую ограниченную область видимости, и код при этом не засорял глобальный скоп.

Об этом речи нет. Мух отдельно.

anonimous
() автор топика

Интересно, что произойдёт, когда товарищ откроет ещё и «use strict». Вообще башню снесёт, наверное.

anonymous
()
Ответ на: комментарий от anonymous

Мне на него срать, оно опционально. Никакого крышесноса тут нет, это способ избавить от проблем убогих, кто не в силах понять язык.

anonimous
() автор топика
Ответ на: комментарий от anonimous

Ты снова расписался в своём маразме, поздравляю.

anonymous
()
Ответ на: комментарий от anonimous

https://stackoverflow.com/questions/19850234/node-js-variable-declaration-and...

Дурачок, лучше слушай, что тебе умные люди говорят. И сам учись нормально выражать свои мысли.

Как обычно, через 100 комментов обнаружится, что ты не понимаешь что такое scope и пользуешься собственным определением.

anonymous
()
Ответ на: комментарий от anonymous

Скоп догогуша, это скоп, у функций с лексическим биндингом, свой скоп, но в js глобальный скоп функций смешан с неймспейсом глобального объекта. В браузерах все переменные глобальные просто копируются в window, и доступны как свойства window. Это хак.

anonimous
() автор топика
Ответ на: комментарий от anonimous

Кормлю attentionwhore

Хорошо, давай по-другому. Ты понимаешь разницу между языком и рантаймом?

anonymous
()
Ответ на: Кормлю attentionwhore от anonymous

Ты понимаешь разницу между языком и текстом программы на языке?

anonimous
() автор топика

ТС скоро умрет от ожирения.

Atheist ★★★
()
Ответ на: комментарий от staseg

Многократные чемпионы олимпиад занесены в красную книгу как редкий вид.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.