更新:
问题解决了!我意识到这是由于“吊装”造成的。基本上,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());
};
});
为什么?