JavaScript ホイストについて読んだことがあります。
JavaScript スコーピングと巻き上げ by Ben Cherry
Dmitry Soshnikov による「巻き上げ」についての 2 つの言葉
そして、JavaScript の型強制、true と false のテストについての詳細: Truth, Equality and JavaScriptおよびその他のリソース
そして、いくつか練習していると、巻き上げと変数「真偽」に関する重要な概念が欠けていることがわかりました。
1: 変数宣言が重複している 'if' 真偽テスト
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
宣言のみに影響し、実行には影響しません)。しかし、なぜそのアラートが表示されるのですか。これは、私が直接使用する場合にはfalse
当てはまりません (以下の非トリック コード: スニペット #3 に示されています)。
2: 変数宣言が重複しない 'if' 真偽判定
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
o/p:出力なし。コントロールが入っていないことを意味します 'if' ブロック
これは期待できることです
3: 重複した変数宣言で「false」を使用する「if」
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p:出力なし。コントロールが入っていないことを意味します 'if' ブロック
これは期待できることです
誰か明確にしてください。ありがとう