Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Reusable function подскажите (https://javascript.ru/forum/misc/45172-reusable-function-podskazhite.html)

Slavarenik 17.02.2014 20:30

Reusable function подскажите
 
Всем привет. Недавно начал знакомится с javascript и DOM.
Просьба не кидаться камнями, еще нуб.
Имеется к примеру такая функция:

Код:

function descAction (element, duration) {
  console.log(element);
  var funcStr = 'descAction('+element+','+duration+')';
  var movement = setTimeout(funcStr, duration);
}

Допустим я применяю функцию на евент onmouseover, один раз показывает элемент, а дальше пишет:
Uncaught SyntaxError: Unexpected identifier

Кто может подсказать что я делаю не так и чего не понимаю, буду благодарен.

danik.js 17.02.2014 21:11

Не используй строку в качестве аргумента setTimeout!!!
Используй функцию.

Slavarenik 17.02.2014 21:38

Так там, на сколько я знаю строка и должна быть.

Если делаю вот так:

Код:

function descAction (element, duration) {
  console.log(element);
  var movement = setTimeout(descAction(element, duration), duration);
}

То в консоли такая картина:
http://www.dropbox.com/sc/fn0odwi446wqhg4/czfMBmKna6

danik.js 17.02.2014 22:02

setTimeout(function(){
    descAction(element, duration);
}, duration);

Slavarenik 17.02.2014 22:38

Благодарю все заработало, спасибо.
В учебнике показали дурной пример со строкой, вот и застопорился.
Тема закрыта.

ruslan_mart 18.02.2014 03:52

Можно ещё так:

var movement = setTimeout(descAction.bind(null, element, duration), duration);


Но лучше юзать анонимную ф-цию.

danik.js 18.02.2014 06:53

Цитата:

Сообщение от Ruslan_xDD
Но лучше юзать анонимную ф-цию.

Не думаю что лучше. Просто bind нету в старых браузерах (типа IE8), что впрочем, решаемо (ES5-shim.js).


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