3

これらのわずかに異なる 2 つのバージョンの巻き上げを考えてみましょう...

mylocation = "dublin" 
function outputPosition() {
    alert(mylocation);
    mylocation = "fingal" ;
    alert(mylocation);
}
outputPosition();

これにより、「fingal」が出力され、次に「fingal」が出力されます

mylocation = "dublin" 
function outputPosition() {
    alert(mylocation);
    var mylocation = "fingal" ;
    alert(mylocation);
}
outputPosition();

これにより、「undefined」と「fingal」が出力されます

なんで?

4

5 に答える 5

6

varjavascript関数内でキーワードを使用して変数を宣言すると、この宣言を関数の先頭または下部に配置しても、ローカル変数と見なされます。そのため、宣言undefinedの前にそのような変数の値を取得しようとすると取得します。var

于 2012-03-17T20:33:15.247 に答える
5

2番目のオプションでは、宣言mylocationを介して新しい変数で非表示にします(外側のスコープで宣言されていることを願っています)var

「JavaScript では、変数は使用後に宣言できます。」意味: JavaScript はvarスコープの先頭に宣言をプルアップします (宣言された場所に関係なく! )。したがって、2 番目の関数var mylocationでは暗黙的に定義されていますが、最初のアラートの前に割り当てられていないため、undefinedその時点で出力されます。

于 2012-03-17T20:21:25.450 に答える
0

mylocation が定義されている場合、最初のスニペットの出力は「dublin」および「fingal」でなければなりません。定義されていない場合は参照エラーです。

詳細については :

http://bustingseams.blogspot.in/2009/08/another-javascript-pitfall-hoisting.html

于 2012-12-11T13:42:10.577 に答える