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

Erolast 27.06.2014 16:02

Цитата:

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


Повторю уже который раз - код в ноде исполняется не в глобальной области видимости.

foo 27.06.2014 16:06

Цитата:

Сообщение от Erolast
код в ноде исполняется не в глобальной области видимости.

Нет. Просто там глобальный объект отделен от пространства имен переменных.

foo 27.06.2014 16:10

Цитата:

Сообщение от Erolast (Сообщение 318308)


Повторю уже который раз - код в ноде исполняется не в глобальной области видимости.

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

kobezzza 27.06.2014 16:10

Господа,

global // ссылка на глобальный объект, говорят в node 0.12 они сделают изменения в этой схеме

(function (module) {
    // Вот так работают модули в node.js

}).call(module.exports, module);

Erolast 27.06.2014 16:11

Цитата:

Нет. Просто там глобальный объект отделен от пространства имен переменных.
Ну-ка, расскажи, в каком таком случае код исполнится в области видимости global. Ну, акромя использования with.
Цитата:

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

foo 27.06.2014 16:12

Цитата:

Сообщение от kobezzza
Вот так работают модули в node.js

И что?

Erolast 27.06.2014 16:14

Цитата:

И что?
Ну как бы очевидно, что объявленная в модуле переменная не попадет в глобальное пространство.

foo 27.06.2014 16:17

Цитата:

Сообщение от Erolast (Сообщение 318318)
Ну-ка, расскажи, в каком таком случае код исполнится в области видимости global. Ну, акромя использования with.

Если объявляешь с вар, этого имени просто нет в глобале (в ноде)

foo 27.06.2014 16:18

Цитата:

Сообщение от Erolast (Сообщение 318320)
Ну как бы очевидно, что объявленная в модуле переменная не попадет в глобальное пространство.

Это уже по десятому ркугу пошло. не имеет это отношения к теме. Я тебе о глобале, а ты мне о модулях, а в огороде бузина.

Erolast 27.06.2014 16:22

Цитата:

Если объявляешь с вар, этого имени просто нет в глобале (в ноде)
Ну да:
Цитата:

global // ссылка на глобальный объект, говорят в node 0.12 они сделают изменения в этой схеме
 
(function (module) {
    // Вот так работают модули в node.js
 
}).call(module.exports, module);

Цитата:

Ну как бы очевидно, что объявленная в модуле переменная не попадет в глобальное пространство.



Цитата:

Я тебе о глобале, а ты мне о модулях, а в огороде бузина.
Ну ты ж не понимаешь, что любой исполняемый скрипт в node.js сам по себе в любом случае является модулем.

foo 27.06.2014 16:23

Цитата:

Сообщение от Erolast
Ну ты ж не понимаешь, что любой исполняемый скрипт в node.js сам по себе в любом случае является модулем.

Это не отменяет существования глобального объекта

foo 27.06.2014 16:25

Цитата:

Сообщение от Erolast
ссылка на глобальный объект, говорят в node 0.12 они сделают изменения в этой схеме

Как именно?

Erolast 27.06.2014 16:25

Цитата:

Это не отменяет существования глобального объекта
И что с того?

foo 27.06.2014 16:30

Цитата:

Сообщение от Erolast
И что с того?

Ты о чем вообще? Я изначально говорил, что удобней, когда переменная доступна в виде свойства глобала. Если тебе это не нужно, изолируй ее как угодно, хоть в модулях, хоть в замыканиях. Но это не Ъ-way для JS

kobezzza 27.06.2014 16:32

Цитата:

Как именно?
Писали, что хотят упростить схему написания "кросс-платформенных" скриптов, т.е. которые работают в разных окружениях, более не изучал этот вопрос - как выйдет буду изучать.

Erolast 27.06.2014 16:33

Цитата:

Я изначально говорил, что удобней, когда переменная доступна в виде свойства глобала.
По-моему, ты говорил о том, что не надо использовать var. И да - так не удобней. Если тебе это кажется удобным... значит, у тебя нету еще достаточного опыта.

foo 27.06.2014 16:36

Цитата:

Сообщение от Erolast
что не надо использовать var

В ноде это взаимозависимо.

nverv 27.06.2014 16:39

Цитата:

Сообщение от foo (Сообщение 318334)
Ты о чем вообще? Я изначально говорил, что удобней, когда переменная доступна в виде свойства глобала. Если тебе это не нужно, изолируй ее как угодно, хоть в модулях, хоть в замыканиях. Но это не Ъ-way для JS

точно!

почему надо бояться глобального объекта?
ведь так проще

kobezzza 27.06.2014 16:39

Господа, пишите как хотите ...

MallSerg 27.06.2014 17:26

Цитата:

Сообщение от nverv
почему надо бояться глобального объекта?

Потому что он глобальный логично же =)


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