Maxmaxmахimus,
в твоем примере создается 2 замыкания, для i и funcs, в поимере же от monolithed, создаётся же всего одно, вот зачем возвращать функцию. |
Цитата:
//переменная funcs существует вне замыкания если что funcs=[]; (function(i){ // замыкание 1 штука, а в нём переменная I !! funcs.push( function(i){ alert(i) } )//невнимательая ошибка от maxmaximus })(1) funcs[0](); //здесь был дьябло Чёто я херню какуюто пишу, 6 утра пойду-ка спать:D |
Я думаю он просто забыл убрать I, когда копировал. По идее же, в обоих случаях должно создаваться 2 замыкания. Ну и возможно я был не прав, при должной оптимизации в обоих случаях может быть по одному замыканию. В общем надо подумать завтра, в долго играющем коде точно применяются такие оптимизации.
|
DjDiablo,
А тут вам самим нужно окститься, невнимательная ошибка новичков. Ну вот как это funcs существует вне замыкания, глобальный объект он, что какой то магический? Он точно так же замыкается первыми функциями и попадает scope chain (термин из es3, не помню термин из es5). |
Отпусти меня чудо трава, я спать хочу :(
с точки зрения реализации javascript, замыкание на переменные глобального scope, или внешней функции это один и тот же механизм. Возможно просто потому что так проще писать интерпретатор :D. Я и неспорю с тем что любая функция является замыканием. Но если мы будем называть любую функцию замыканием, вам некажется что будет путаница ? Традиционно называют замыканиями именно вложенные функции, из традиционного определения я и исходил. Однако даже исходя их традиционного определения, я пожалуй поспешил с утверждением что там не одного замыкания. funcs.push( function(i){ alert(i) } и быть может потянет за собой scope внешний функции, только фактом своего существования. думаю это можно попробывать проверить так. var ret= (function(){ var test=100; return function(){ eval ("alert"+"(test)"); }; })() ret(); врял ли интерпретатор знал что я буду использовать test, но если пример сработал, значит внешний scope был всё таки доступен. |
DjDiablo,
Это традиционная ошибка или отговорка? Например в V8 и Chakra вызов кода внутри контекста эта функция, так что получается любая ваша функция вложенная. Вы не считаете, что путаницу вводите вы? Про вложенную функцию было написано здесь, на javascript.ru, и такое ощущение, что никто больше других статей не читал. Цитата:
|
Цитата:
Цитата:
Восприятие не вложенных функций как замыканий на практике недаёт каких либо выгод, в отличие от практической и осознанной применимости свойства замыканий у вложенных функций. Scope на глобальном уровне описывает понятие глобальные переменные, для переменных внутри функции обычно применяют понятие локальных переменных. Потребность использования scope в рассуждениях возникает только с введением вложенных функций. можно сделать вывод, что существуют предпосылки для обьяснения только видимой и осознанно используемой части явления. Вот вам и корни "традиционного обьяснения замыканий". Например в V8 и Chakra вызов кода внутри контекста эта функция - а вот об этом можно поподробнее ? Просто продолжение рода - это тоже функция :D И вот я думаю, если скрипт начнёт мне показывать порно картинки, и я после просмотра пойду в гости к девушке, то будет ли справедливо утверждение что javascript вызвал мою функцию продолжения рода :D :D :D. Может нужно остановится на каком то уровне абстракции а не пытаться обьяснять scope, при помощи описания процессов в транзисторах. |
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
__________________________________________________ __________________ я вообще в шоке с вас, все такие умные знают как скопчайны работают контексты и все дела, но иногда ТАКОЕ порите.... просто жесть |
Цитата:
Значит эксперемент нечего не показал. Я был уверен что замыкания не будет если из внешний функции не заимствоваются переменные, пока ты меня сомневаться не заставил. Есть подтверждение что их меньше будет, или ты тоже предполагаешь? И так ли это во всех движках ? |
Часовой пояс GMT +3, время: 23:18. |