【发布时间】:2025-11-25 21:45:01
【问题描述】:
更新:
问题已解决!我意识到这是由于“吊装”造成的。基本上,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());
};
});
为什么?
【问题讨论】:
标签: javascript scope hoisting