вопрос о ссылках на функции JavaScript - PullRequest
4 голосов
/ 24 февраля 2011

Почему этот код:

<a href="#">Sample link</a>
<script>
    setTimeout($('a').hide, 2000)
</script>

не работает так:

<a href="#">Sample link</a>
<script>
    setTimeout(function(){ $('a').hide(); }, 2000)
</script>

Ответы [ 4 ]

3 голосов
/ 24 февраля 2011

Выражение $('a').hide возвращает стандартную функцию jQuery hide без ссылки на $('a').
Когда вы вызываете $('a').hide() как оператор, $('a') передается как this параметр hide.

Однако, когда вы передаете функцию hide в setTimeout, она не вызывает функцию в $('a'); все функции setTimeout вызваны на window.

3 голосов
/ 24 февраля 2011

Дело в том, что this привязан к глобальному объекту внутри вызовов setTimeout.Отсюда следует, что и

setTimeout($('a').hide, 2000)

и

setTimeout(function(){ $('a').hide(); }, 2000)

будут вызывать методы $('a').hide, но с разными значениями для this (window в первом случае и $('a') во втором).

Здесь - более подробная информация о значении this в зависимости от способа вызова функции.

2 голосов
/ 24 февраля 2011

Проблема this.В JavaScript это точечная нотация, используемая при вызове функции, которая связывает this - поэтому, пока в первом примере вы передаете функцию a hide, она не связана ни с каким конкретным объектом jQuery.

0 голосов
/ 24 февраля 2011

И если вы хотите, чтобы ваша строка кода работала, вы должны указать это:

setTimeout("$('a').hide()", 2000)
OR

Посмотрите: http://www.w3schools.com/jsref/met_win_settimeout.asp

...