2016-10-12 6 views
0

Мне любопытно, есть ли разница между двумя функциями ниже?Разница между передачей обратного вызова и функцией

Можно ли передать функцию внутри анонимной функции, когда ready, тогда как другая передает фактическую именованную функцию, когда ready?

Пример:

<p>Not loaded yet.</p> 

Первый метод:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(function() { 
    newName() 
}); 

Второй метод:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(newName()); 

еще один правильно, чем другие?

+1

В '$ (document) .ready (newName());' 'функция newName' *** не запускается *** при загрузке DOM, она запускается * перед *. Это происходит потому, что вы запускаете его немедленно и передаете его возвращаемое значение в качестве обработчика готовности DOM. –

+0

Почему голос? –

ответ

2

Есть один только проездом функцию внутри анонимной функции, когда ready в то время как другой проходит фактическую указанную функцию, когда ready?

Да и нет.

Мне любопытно, есть ли разница между этими двумя?

Первый передаёт функцию обратного вызова, которая выполняется при срабатывании события. При этом даже пожарах объясняется here.

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

$(document).ready(newName); 

Это будет передавать функции ссылку, и не будет вызывать его. Кроме того, как упоминалось ранее, использование ready(func(); func2();) недопустимого синтаксиса.

+0

Спасибо! Они спросили, потому что первый не работает, но последний сделал. '$ (document) .ready (newName(); otherName(); otherName1());' - это тот, который работал странно. –

+0

@JoshChristensen: Я не знаю, где вы это видели, но это синтаксическая ошибка. Вероятно, вы хотели '$ (document) .ready (function() {newName(); otherName(); otherName1();});'. –

+1

@JoshChristensen В первом вы передаете обратный вызов, который выполняется при запуске события. Во-вторых, вы * вызываете * функцию сначала (тем самым, казалось бы, работающую), тогда вы передаете возвращаемое значение функции в 'ready', что не имеет смысла. – Li357

1

Эффективно нет никакой разницы между

$(document).ready(function(){ 
    newName(); 
}); 

и

$(document).ready(newName); 

Там небольшая техническая разница: в первом фрагменте, анонимная функция вызова newName передается, во втором фрагменте, названный функция newNameсам принят.

Функции - это только вызываемые объекты, на которые можно ссылаться по их имени или имени переменной, содержащей эту функцию.

Обратите внимание, что $(document).ready(newName()); звонит newName - немедленно - и прохождение возвращаемое значение в ready. Это имеет смысл только в том случае, если newName возвращает другую функцию, которая в этом случае нет.

В названии также упоминается что-то вроде $(document).ready(newName){}. Я предполагаю, что это опечатка, поскольку это неверный синтаксис.

$(document).ready(newName(); otherName(); otherName1()); также недопустим синтаксис.

+0

Вы правы, название имеет опечатку, спасибо –

Смежные вопросы