Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   КАКОЙ КОД ОПТИМАЛЬНЕЕ (https://javascript.ru/forum/misc/24163-kakojj-kod-optimalnee.html)

Livanderiaamarum 19.12.2011 23:10

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

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


или

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


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

trikadin 19.12.2011 23:11

Первый. Плюс он короче и читабельнее.

Livanderiaamarum 19.12.2011 23:15

Цитата:

Сообщение от trikadin (Сообщение 144574)
Первый. Плюс он короче и читабельнее.

Ясно, поделитесь почему?:)

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

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

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

trikadin 19.12.2011 23:20

Цитата:

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

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

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

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

melky 20.12.2011 00:08

Цитата:

Сообщение от Livanderiaamarum (Сообщение 144572)
Как быстрее?

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();
}

Livanderiaamarum 20.12.2011 00:13

Цитата:

Сообщение от melky (Сообщение 144592)
я бы сделал так :


var q = function(){

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

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

    return q();
}

я понял что тут происходит, но я не понял как это связано с кешированием функций?

melky 20.12.2011 00:17

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

PS если бы ты полностью понял, вопроса бы у тебя не возникло

Livanderiaamarum 20.12.2011 00:22

Цитата:

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

PS если бы ты полностью понял, вопроса бы у тебя не возникло

q() при вызове перезаписывает себя, и сохраняет в себе w , кэширует, ясно)

melky 20.12.2011 00:31

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

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

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


function q ()
{
      var self = arguments.callee;
      self.w = function(){};
      self.w();
}
q()

Livanderiaamarum 20.12.2011 00:35

Цитата:

Сообщение от melky (Сообщение 144604)
ответ неверный на 50%:)

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

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


function q ()
{
      var self = arguments.callee;
      self.w = function(){};
      self.w();
}
q()

я не свойство имел ввиду а скоп)


Часовой пояс GMT +3, время: 05:37.