Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   где еще используется VAR ? (https://javascript.ru/forum/misc/48246-gde-eshhe-ispolzuetsya-var.html)

foo 27.06.2014 15:37

Цитата:

Сообщение от nverv
он из какого языка пришел к нам

Из смолтока и селфа. Собственно, первый JS -- это калька со смолтока. Тут речь не о синтаксисе, а о семантике. синтаксис может быть любым, это не важно.

nverv 27.06.2014 15:37

Цитата:

Сообщение от foo (Сообщение 318281)
На самом деле, откуда идут корни проблемы. Объявление без var соответствует оператору set! из scheme -- это оператор деструктивного присваивания. Обьявление без вар не модифицирует глобальную область, он модифицирует низлежащее лексическое окружение. Если бы программисты JS это понимали, они бы не стреляли себе в ногу,


counterMaker=function(start){return function(){console.log(start++)}}
counter=counterMaker(5)

counter()
counter()
counter()
//--------------\  
5
6
7

Это ф-ция с состоянием, и она не засирает глобал, хотя никакого вар тут нет, синтаксически. Все проблемы от непонимания инструмента.

всё таки наверное я тупой, ничо не понял

nverv 27.06.2014 15:39

Цитата:

Сообщение от foo (Сообщение 318286)
Из смолтока и селфа. Собственно, первый JS -- это калька со смолтока. Тут речь не о синтаксисе, а о семантике. синтаксис может быть любым, это не важно.

читатель ожидает от тебя в таких случаях примеры кода из языков прототипов

Erolast 27.06.2014 15:43

Цитата:

что такое переменная?! если не просто именованный контейнер, адрес относительно глобального корня

о чем мы спорим?
Переменная - это именнованный контейнер, да.

Спорим мы о том, использовать ли var при объявлении переменных в глобальной области видимости. foo заявляет, что не надо, раз возможно.

foo 27.06.2014 15:43

Цитата:

Сообщение от nverv
ничо не понял

Короче, семантика var -- это создание замыкания, примерно то же самое, что лет. Если рассахарить, это будет вот так

fu1=function(x){return function(){return x+x}}(1)
fu2=function(){var x=1; return x+x}

Это одно и то же.

foo 27.06.2014 15:45

Цитата:

Сообщение от nverv
примеры кода из языков прототипов

Да я их не знаю. Чем JS тебе не язык прототипов?

nverv 27.06.2014 15:47

Цитата:

Сообщение от Erolast (Сообщение 318289)
Переменная - это именнованный контейнер, да.

Спорим мы о том, использовать ли var при объявлении переменных в глобальной области видимости. foo заявляет, что не надо, раз возможно.

я тоже заявляю что не надо, но не поэтому

а потому что есть правильный метод создания именованых контейнеров о общем адресном пространстве - добавьСвойство()

удел оператора var - локальные переменные внутри подпрограмм

- так просто и логично

Erolast 27.06.2014 15:51

Метод defineProperty используется для определения свойства объекта, и используется лишь в том случае, если надо провесить какие-либо флаги.

Оператор var используется для объявления переменных.

Для определения свойств использовать defineProperty вовсе необязательно. Возможно просто так:
var object = {};
object.property = 10;


---
Все это я уже говорил на страницах сей темы. Но что-то ты все пропустил.

nverv 27.06.2014 15:55

Цитата:

Сообщение от Erolast (Сообщение 318298)
Метод defineProperty используется для определения свойства объекта, и используется лишь в том случае, если надо провесить какие-либо флаги.

Оператор var используется для объявления переменных.

Для определения свойств использовать defineProperty вовсе необязательно. Возможно просто так:
var object = {};
object.property = 10;


.

дык этоже не сооответствует "жесткому режиму" ибо следует каждое свойство создавать перед использованием

foo 27.06.2014 15:55

Цитата:

Сообщение от Erolast
Возможно просто так:

И в ноде:
global.object//undefined


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