Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #91 (permalink)  
Старый 12.10.2012, 01:33
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Maxmaxmахimus,
в твоем примере создается 2 замыкания, для i и funcs, в поимере же от monolithed, создаётся же всего одно, вот зачем возвращать функцию.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #92 (permalink)  
Старый 12.10.2012, 01:43
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
в твоем примере создается 2 замыкания, для i и funcs,
Акстись у maxmaximus пример нерабочий, даже если дофантазировать что рабочий то где ты там два замыкания увидел ?

//переменная funcs существует вне замыкания если что
funcs=[];

(function(i){
 // замыкание 1 штука, а в нём переменная I !! 
 funcs.push( function(i){ alert(i) } )//невнимательая ошибка  от maxmaximus
})(1)
funcs[0]();
//здесь был дьябло


Чёто я херню какуюто пишу, 6 утра пойду-ка спать
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 12.10.2012 в 03:09.
Ответить с цитированием
  #93 (permalink)  
Старый 12.10.2012, 02:06
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Я думаю он просто забыл убрать I, когда копировал. По идее же, в обоих случаях должно создаваться 2 замыкания. Ну и возможно я был не прав, при должной оптимизации в обоих случаях может быть по одному замыканию. В общем надо подумать завтра, в долго играющем коде точно применяются такие оптимизации.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #94 (permalink)  
Старый 12.10.2012, 02:11
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

DjDiablo,
А тут вам самим нужно окститься, невнимательная ошибка новичков. Ну вот как это funcs существует вне замыкания, глобальный объект он, что какой то магический? Он точно так же замыкается первыми функциями и попадает scope chain (термин из es3, не помню термин из es5).
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #95 (permalink)  
Старый 12.10.2012, 02:52
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Отпусти меня чудо трава, я спать хочу

с точки зрения реализации javascript, замыкание на переменные глобального scope, или внешней функции это один и тот же механизм. Возможно просто потому что так проще писать интерпретатор .

Я и неспорю с тем что любая функция является замыканием. Но если мы будем называть любую функцию замыканием, вам некажется что будет путаница ?

Традиционно называют замыканиями именно вложенные функции, из традиционного определения я и исходил.

Однако даже исходя их традиционного определения, я пожалуй поспешил с утверждением что там не одного замыкания. funcs.push( function(i){ alert(i) } и быть может потянет за собой scope внешний функции, только фактом своего существования.

думаю это можно попробывать проверить так.
var ret= (function(){
      var test=100;
      return function(){ 
            eval ("alert"+"(test)");
      };
})()
ret();

врял ли интерпретатор знал что я буду использовать test, но если пример сработал, значит внешний scope был всё таки доступен.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 12.10.2012 в 14:50.
Ответить с цитированием
  #96 (permalink)  
Старый 12.10.2012, 03:00
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

DjDiablo,
Это традиционная ошибка или отговорка? Например в V8 и Chakra вызов кода внутри контекста эта функция, так что получается любая ваша функция вложенная. Вы не считаете, что путаницу вводите вы? Про вложенную функцию было написано здесь, на javascript.ru, и такое ощущение, что никто больше других статей не читал.

Цитата:
с точки зрения реализации javascript, замыкание на переменные глобального scope, или внешней функции это одно и тоже. Просто потому что так проще писать интерпритатор .
Да неужели
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #97 (permalink)  
Старый 12.10.2012, 03:18
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Да неужели
зуб даю

Цитата:
Это традиционная ошибка или отговорка
Я думаю это видимая часть айсберга.

Восприятие не вложенных функций как замыканий на практике недаёт каких либо выгод, в отличие от практической и осознанной применимости свойства замыканий у вложенных функций. Scope на глобальном уровне описывает понятие глобальные переменные, для переменных внутри функции обычно применяют понятие локальных переменных. Потребность использования scope в рассуждениях возникает только с введением вложенных функций.

можно сделать вывод, что существуют предпосылки для обьяснения только видимой и осознанно используемой части явления. Вот вам и корни "традиционного обьяснения замыканий".

Например в V8 и Chakra вызов кода внутри контекста эта функция - а вот об этом можно поподробнее ?

Просто продолжение рода - это тоже функция И вот я думаю, если скрипт начнёт мне показывать порно картинки, и я после просмотра пойду в гости к девушке, то будет ли справедливо утверждение что javascript вызвал мою функцию продолжения рода .

Может нужно остановится на каком то уровне абстракции а не пытаться обьяснять scope, при помощи описания процессов в транзисторах.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 12.10.2012 в 05:42.
Ответить с цитированием
  #98 (permalink)  
Старый 12.10.2012, 03:21
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Цитата:
врял ли интерпритатор знал что я буду использовать test, но если пример сработал, значит внешний scope был всётаки доступен.
Когда в коде есть eval и когда его нету, происходит разная интерпритация. Когда есть eval, сохраняются все области видимости и их биндинги. Когда нету eval, области видимости могут не сохраняться, если они пустые, биндинги могут удалятся GC из-за того, что они не испульзуются и так далее. И по факту, замыканий будет в разы меньше.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #99 (permalink)  
Старый 12.10.2012, 04:00
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Сообщение от Nekromancer
в твоем примере создается 2 замыкания, для i и funcs, в поимере же от monolithed, создаётся же всего одно, вот зачем возвращать функцию.
че за бред у нас у обоих одинаковое "количество" замыканий.

Сообщение от DjDiablo
Акстись у maxmaximus пример нерабочий, даже если дофантазировать что рабочий то где ты там два замыкания увидел ?
очевидно что мой пример не рабочий !! там даже цикла FOR нет!

Сообщение от Nekromancer
Я думаю он просто забыл убрать I, когда копировал. По идее же, в обоих случаях должно создаваться 2 замыкания. Ну и возможно я был не прав
уже лучше

Сообщение от DjDiablo
Чёто я херню какуюто пишу, 6 утра пойду-ка спать
ваще ДИКУЮ
__________________________________________________ __________________

я вообще в шоке с вас, все такие умные знают как скопчайны работают контексты и все дела, но иногда ТАКОЕ порите.... просто жесть

Последний раз редактировалось Maxmaxmахimus, 12.10.2012 в 04:08.
Ответить с цитированием
  #100 (permalink)  
Старый 12.10.2012, 05:30
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Когда в коде есть eval и когда его нету, происходит разная интерпритация. Когда есть eval, сохраняются все области видимости и их биндинги. Когда нету eval, области видимости могут не сохраняться, если они пустые, биндинги могут удалятся GC из-за того, что они не испульзуются и так далее. И по факту, замыканий будет в разы меньше.
Это звучит очень логично.

Значит эксперемент нечего не показал.
Я был уверен что замыкания не будет если из внешний функции не заимствоваются переменные, пока ты меня сомневаться не заставил.
Есть подтверждение что их меньше будет, или ты тоже предполагаешь? И так ли это во всех движках ?
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 12.10.2012 в 06:17.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи по Java and JavaScript Другое Имя Работа 1 26.10.2011 00:11
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Подходит ли Javascript для решения следующей задачи? alikol Оффтопик 4 24.10.2010 22:40
Подходит ли Javascript для решения следующей задачи? alikol Общие вопросы Javascript 7 24.10.2010 14:10
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34