Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 10.08.2008, 23:09
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

" вставляется элемент глобальной (в данном scope)
// переменной arr"

Вот вы и нашли глобальную переменную...

Нашли???
Ответить с цитированием
  #42 (permalink)  
Старый 10.08.2008, 23:12
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Если смущает str - убери её из обоих тестов...
Оставь только a и arr.
Ну тогда уж точно будет видно, где локальная, где глобальная...

просто во втором тесте тогда нибудет никаких действий в функции: почему? - потому что я ВЫНЕС её инициализацию в глобальный контекст!!!
Ответить с цитированием
  #43 (permalink)  
Старый 10.08.2008, 23:14
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Прочтите, пожалуйста, пост №11

И скажите - я ответил правильно?

Разве у меня в функции не идёт ОБРАЩЕНИЕ к глобальной переменной?
Ответить с цитированием
  #44 (permalink)  
Старый 10.08.2008, 23:36
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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]);
Ответить с цитированием
  #45 (permalink)  
Старый 10.08.2008, 23:47
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Ну ответь же мне:
1) мой пример работает?
2) Он на мониторе виден (в смысле существует)?
3) Работает быстрее?
4) "а вторая просто вставляет элемент глобальной" - к глобальной переменной обращается?
Ответить с цитированием
  #46 (permalink)  
Старый 10.08.2008, 23:52
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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]);
Ответить с цитированием
  #47 (permalink)  
Старый 10.08.2008, 23:59
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Я не спорю, что использование глобальных переменных ускоряет выполнение некоторых конкретных задач. Но в только в общем плане, например использование одного массива несколькими функциями и т.д. Но в каждой конкретной функции вариант с локальными переменными будет работать быстрее. Вот, например:
// Пример с глобальной переменной:
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]);
Ответить с цитированием
  #48 (permalink)  
Старый 11.08.2008, 00:05
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Сообщение от Андрей Параничев Посмотреть сообщение
Я не спорю, что использование глобальных переменных ускоряет выполнение некоторых конкретных задач. Но в только в общем плане, например использование одного массива несколькими функциями и т.д.
ВОТ!!!

Вот это я и сказал (если прочтесть ветку сначала).

Я привёл конкретную задачу, когда в таблице массивы определялись В ФУНКЦИИ (они были локальными).
Я предложил их определние вынести в глобальный контекст (точно такой пример я и привёл).

Я не прав?

Сообщение от Андрей Параничев Посмотреть сообщение
Но в каждой конкретной функции вариант с локальными переменными будет работать быстрее.
Не в каждой!!! И пример я привёл в какой не будет. И топикстартер так делает и ещё куча новичков!!!
Ответить с цитированием
  #49 (permalink)  
Старый 11.08.2008, 00:27
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

ZoNT,
Попробуйте выполнить код из сообщения #47. Он наглядно показывает, что обработка локальных переменных (работа с ними) происходит быстрее в любом конкретном случае.

Я понимаю, что вы хотели сказать сначала, но вы прицепились к совершенно верному утверждению, что работа с локальными переменными всегда будет быстрее, чем с глобальными, когда практика (и теория, которую выкладывал Дмитрий) показывает, что это верно.

В любом случае обсуждение зашло в тупик, давайте каждый останется при своем личном мнении на счет этого вопроса. Потому что доводы всех высказавшихся в этой теме верны в разных случаях.

Последний раз редактировалось Андрей Параничев, 11.08.2008 в 00:33.
Ответить с цитированием
  #50 (permalink)  
Старый 11.08.2008, 00:30
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Ну вы же видите пример, где НЕ ВСЕГДА локальные переменные быстрее...

И вот из-за ваших с Дмитрием утверждений люди (как топикстартер) в заблуждении пишут вот такую лабуду...
Ответить с цитированием
Ответ



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

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