私はいつかJavaScriptホイストについて読んできました。JavaScriptホイストと真実と偽りを理解する
JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov
と、JavaScriptの型強制、真実&偽のテストに関するいくつかの詳細: Truth, Equality and JavaScriptといくつかの他のリソース
そして、いくつかを練習しながら、私はいくつかの重要な概念が欠落しているmは見つけ変態と真実について&偽物。
1:重複した変数宣言
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
O/Pとの真実試験 'が':inside if
ダウト: 'FOO' の値 '1' は、if(!foo)
はfalse
に評価すべきであるとそのブロックは実行されるべきではありません(上のリソースから引用:昇降はvar
& function
宣言のみに影響しますが、実行は影響しません)。しかし、なぜその警告が表示されます。 このIは、直接(無トリック以下のコードで示す:スニペット#3)false
を使用する場合は当てはまらない
2:真実試験重複変数宣言せず
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
O/P「であれば」 :出力なし。制御はブロック「が」入力されていないことを意味
これは1つが期待できるものである
3:重複した変数宣言
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
O/pで「もし」を使用した「偽」:出力しません。ブロックが「if」ブロックに入力されていないことを意味します。
誰かが明確にしてください。ありがとう
私の悪いです。私はその機能を全く気にしなかった。私はタイプ強制と巻上に集中しているだけです(彼らは私の頭の中で回転しています)。重複した宣言が関数内にない場合、 'foo'は2番目の宣言の後であっても前の値(1)を持ちます。このすべての思考は私に、使用された機能を見逃してしまった。私の目を開けてくれてありがとう:) – manikanta
なぜ3番はうまくいかないのですか?変数が定義されていない場合、それはその偽を意味しますか? – bill