Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2011, 23:10
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

КАКОЙ КОД ОПТИМАЛЬНЕЕ
Как быстрее?

function q ()
{
      function w (){}//опишем функцию
      w()//вызовем её
}
q()


или

function q ()
{
      var self = arguments.callee
      self.w()//вызовем функцию
}
q.w = function (){}//опишем функцию
q()


при условии что q() мы будем вызывать часто
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2011, 23:11
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Первый. Плюс он короче и читабельнее.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2011, 23:15
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от trikadin Посмотреть сообщение
Первый. Плюс он короче и читабельнее.
Ясно, поделитесь почему?

я думал что в первом случае при входе в контекст функции q() каждый раз создается функция w()

во втором случае же функция w() уже создана и хранится в памяти и не тратится время на её создание. мы просто обращаемся к ней по ссылке.

Я ДУМАЛ ТАК. а как на самом деле?

Последний раз редактировалось Livanderiaamarum, 19.12.2011 в 23:17.
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2011, 23:20
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Livanderiaamarum
во втором случае же функция w() уже создана и хранится в памяти и не тратится время на её создание. мы просто обращаемся к ней по ссылке.

Я ДУМАЛ ТАК. а как на самом деле?
Если говорить про однократное использование - то первый вариант короче в силу меньшего времени на поиск переменной в различных скопах. Если про многократное - то да, ф-цию лучше закешировать, второй вариант лучше. Но я бы сделал так, т.к. arguments.callee в последнее время не рекомендуется к употреблению:

var w;
(function(){
 var q= function(){};
 w= function(){
  q();
 };
})()
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #5 (permalink)  
Старый 20.12.2011, 00:08
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Livanderiaamarum Посмотреть сообщение
Как быстрее?

function q ()
{
      function w (){}//опишем функцию
      w()//вызовем её
}
q()


или

function q ()
{
      var self = arguments.callee
      self.w()//вызовем функцию
}
q.w = function (){}//опишем функцию
q()


при условии что q() мы будем вызывать часто
я бы сделал так :


var q = function(){

    var w = function(){ /*...*/ }; 

    q = function(){
        return w();
    };

    return q();
}
Ответить с цитированием
  #6 (permalink)  
Старый 20.12.2011, 00:13
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от melky Посмотреть сообщение
я бы сделал так :


var q = function(){

    var w = function(){ /*...*/ }; 

    q = function(){
        return w();
    };

    return q();
}
я понял что тут происходит, но я не понял как это связано с кешированием функций?
Ответить с цитированием
  #7 (permalink)  
Старый 20.12.2011, 00:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

перед тем, как ответить на твой вопрос, расскажи, что ты понял

PS если бы ты полностью понял, вопроса бы у тебя не возникло
Ответить с цитированием
  #8 (permalink)  
Старый 20.12.2011, 00:22
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от melky Посмотреть сообщение
перед тем, как ответить на твой вопрос, расскажи, что ты понял

PS если бы ты полностью понял, вопроса бы у тебя не возникло
q() при вызове перезаписывает себя, и сохраняет в себе w , кэширует, ясно)
Ответить с цитированием
  #9 (permalink)  
Старый 20.12.2011, 00:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

ответ неверный на 50%

сохраняет в себе, это значит "добавляет свойство к себе"

вот этот код как раз это делает


function q ()
{
      var self = arguments.callee;
      self.w = function(){};
      self.w();
}
q()
Ответить с цитированием
  #10 (permalink)  
Старый 20.12.2011, 00:35
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от melky Посмотреть сообщение
ответ неверный на 50%

сохраняет в себе, это значит "добавляет свойство к себе"

вот этот код как раз это делает


function q ()
{
      var self = arguments.callee;
      self.w = function(){};
      self.w();
}
q()
я не свойство имел ввиду а скоп)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать bodyclick код royksopp Общие вопросы Javascript 8 14.10.2011 16:39
АААААААААА!!! Протестируйте пожалуйста код в разных браузерах. выявляем ошибки. prototype Элементы интерфейса 1 22.07.2011 07:47
код странно отрабатывает комбинацию клавиш ffx Общие вопросы Javascript 4 20.01.2011 10:58
какой код клавиши у кнопки cmd у apple demi Events/DOM/Window 2 25.02.2010 11:32
Opera отдаёт неправильный код функциональных клавиш. NT Man Opera, Safari и др. 1 19.01.2010 02:45