" вставляется элемент глобальной (в данном scope)
// переменной arr" Вот вы и нашли глобальную переменную... Нашли??? |
Если смущает str - убери её из обоих тестов...
Оставь только a и arr. Ну тогда уж точно будет видно, где локальная, где глобальная... просто во втором тесте тогда нибудет никаких действий в функции: почему? - потому что я ВЫНЕС её инициализацию в глобальный контекст!!! |
Прочтите, пожалуйста, пост №11
И скажите - я ответил правильно? Разве у меня в функции не идёт ОБРАЩЕНИЕ к глобальной переменной? |
ZoNT,
Ваш пример наглядно показывает только то, что array.push(element); работает медленнее, чем array[index]; У вас в первом примере используются только локальные переменные, а во втором - две локальные переменные (в своих контекстах), а вторая просто вставляет элемент глобальной. Локальные переменные работают быстрее в любом контектсте. Вот два идентичных примера, проверьте самостоятельно: // Пример с локальной переменной: function F1(){ var a = []; for (var i=0;i<1000;i++) a.push(i); } var start = new Date(); for (var i=0;i<1000;i++) F1(); var res1 = (new Date())-start; // Пример с глобальной переменной: function F2(){ for (var i=0;i<1000;i++) b.push(i); } start = new Date(); for (var i=0;i<1000;i++) { var b = []; F2(); } var res2 = (new Date())-start; alert([res1,res2]); |
Ну ответь же мне:
1) мой пример работает? 2) Он на мониторе виден (в смысле существует)? 3) Работает быстрее? 4) "а вторая просто вставляет элемент глобальной" - к глобальной переменной обращается? |
ZoNT,
Вы увиливаете от ответа и упорствуете в ошибке. Ваш пример на самом деле абсурден насколько же, насколько вот такой: function F1(){ var a = []; for (var i=0;i<1000;i++) a.push(i); } var start = new Date(); for (var i=0;i<1000;i++) F1(); var res1 = (new Date())-start; var b = []; for (var i=0;i<1000;i++) b.push(i); function F2(){ b[i]; } start = new Date(); for (var i=0;i<1000;i++) { F2(); } var res2 = (new Date())-start; alert([res1,res2]); |
Я не спорю, что использование глобальных переменных ускоряет выполнение некоторых конкретных задач. Но в только в общем плане, например использование одного массива несколькими функциями и т.д. Но в каждой конкретной функции вариант с локальными переменными будет работать быстрее. Вот, например:
// Пример с глобальной переменной: function F1(){ for (var i=0;i<1000;i++) a.push(i); } var start = new Date(); for (var i=0;i<1000;i++) { var a = []; F1(); }; var res1 = (new Date())-start; // Пример с глобальной и локальной переменной: function F2(){ var arr = b; for (var i=0;i<1000;i++) arr.push(i); } start = new Date(); for (var i=0;i<1000;i++) { var b = []; F2(); } var res2 = (new Date())-start; alert([res1,res2]); |
Цитата:
Вот это я и сказал (если прочтесть ветку сначала). Я привёл конкретную задачу, когда в таблице массивы определялись В ФУНКЦИИ (они были локальными). Я предложил их определние вынести в глобальный контекст (точно такой пример я и привёл). Я не прав? Цитата:
|
ZoNT,
Попробуйте выполнить код из сообщения #47. Он наглядно показывает, что обработка локальных переменных (работа с ними) происходит быстрее в любом конкретном случае. Я понимаю, что вы хотели сказать сначала, но вы прицепились к совершенно верному утверждению, что работа с локальными переменными всегда будет быстрее, чем с глобальными, когда практика (и теория, которую выкладывал Дмитрий) показывает, что это верно. В любом случае обсуждение зашло в тупик, давайте каждый останется при своем личном мнении на счет этого вопроса. Потому что доводы всех высказавшихся в этой теме верны в разных случаях. |
Ну вы же видите пример, где НЕ ВСЕГДА локальные переменные быстрее...
И вот из-за ваших с Дмитрием утверждений люди (как топикстартер) в заблуждении пишут вот такую лабуду... |
Часовой пояс GMT +3, время: 01:36. |