UPDATE:
ВОПРОС РЕШЕН! Я понял, что причина этого в «подъеме». По сути, интерпретатор JavaScript анализирует код и объявляет все переменные (но не инициализирует их) в начале функции. Вот почему вторые примеры не работают. Поскольку интерпретатор JavaScript объявляет var changed;
в начале функции, но не инициализирует его , пока не достигнет тела кода.
Для объявления функции , как в первом примере, вместо того, чтобы JavaScript двигался вверх только на имя переменной, как во втором примере, он перемещается вверх (или «поднимает») вверх по всей функции в начале родительской функции, поэтому она работает!
Во всяком случае, я написал это для личного ознакомления и спасибо за ответы ...
Этот работает: http://jsbin.com/emarat/7/edit
$(function(){
$name = $('#test');
$name.change(changedName);
function changedName (e){
console.log('e: ', e);
console.log('e.currentTarget: ', e.currentTarget);
console.log('$(e.currentTarget).val(): ', $(e.currentTarget).val());
$('#test-display').text($(e.currentTarget).val());
}
});
но это не так: http://jsbin.com/emarat/9/edit
$(function(){
$name = $('#test');
$name.change(changed);
var changed = function(e){
console.log('e: ', e);
console.log('e.currentTarget: ', e.currentTarget);
console.log('$(e.currentTarget).val(): ', $(e.currentTarget).val());
$('#test-display').text($(e.currentTarget).val());
};
});
Почему?