アップデート:
質問が解決しました!その理由は「巻き上げ」によるものだと気づきました。基本的に、JavaScriptインタープリターはコードを解析し、関数の先頭ですべての変数を宣言します(ただし、それらは初期化しません)。そのため、2番目の例は機能しません。JavaScriptインタープリターvar changed;
は関数の先頭で宣言しますが、コードの本体に到達するまで初期化しないためです。
最初の例のような関数宣言の場合、JavaScriptが2番目の例のように変数名だけを上に移動する代わりに、親関数の先頭で関数全体を上に移動(または「ホイスト」)します。これが機能する理由です。
とにかく、私は個人的な参照のためにこれを書きました、そして答えに感謝します...
これは機能します: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());
};
});
なんで?