функция указателя javascript - PullRequest
0 голосов
/ 21 февраля 2009

если у меня есть:

function init(t,y,u) 
{
   alert(t + " " + y + " " + u);
}

// String.prototype.add = init(5, 6, 7);  // 1)   
// window.onload = init(5,6,7); // 2)

в 1) init будет выполняться, а затем указатель будет установлен на String.prototype.add но в 2) функция выполняется только один раз ... но почему не два раза когда возникает событие onload?

Спасибо

Ответы [ 3 ]

8 голосов
/ 21 февраля 2009

в 1) init будет выполняться, а затем указатель будет собран в String.prototype.add

Нет, не будет. Функция просто будет выполнена, и ее возвращаемое значение (undefined) будет присвоено String.prototype.add. Указатель функции не будет назначен. Для этого вам нужно вернуть функцию!

function init(t,y,u) {
    alert(t + " " + y + " " + u);
    return function () { alert('function call!'); };
}
5 голосов
/ 21 февраля 2009

Вы можете захотеть что-то вроде:

String.prototype.add = function () { init(5, 6, 7); };
3 голосов
/ 21 февраля 2009

Вот что происходит с вашим кодом:

  • Определение функции под названием init с тремя параметрами, которые будут оповещены при вызове функции.
  • Вызов функции init с параметрами 5,6,7 (всплывет предупреждение) и присвоение результата (не определено) String.prototype.add
  • Вызов функции init с параметрами 5,6,7 (появится всплывающее предупреждение) и присвоение результата (не определено) window.onload

Если приведенный выше код был выполнен до того, как сработало событие window.onload, при его запуске ничего не произойдет, поскольку для него установлено значение undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...