[解決済み] Javascriptの関数スコープとホイスト
2023-01-04 07:55:44
質問
私はちょうど次のような素晴らしい記事を読みました。 JavaScript のスコープとホイスティング by Ben Cherry に関する素晴らしい記事を読みました。その中で、彼は次のような例を挙げています。
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
上記のコードを使用すると、ブラウザは "1"を警告します。
なぜ"1"が返ってくるのか、まだよくわかりません。彼が言うことの中には、次のようなものが思い浮かびます。 関数宣言はすべて一番上に吊り上げられる。関数を使って変数をスコープすることができる。 まだ、私には理解できません。
どのように解決するのですか?
Function hoistingとは、関数をスコープの先頭に移動させることです。つまり
function b() {
a = 10;
return;
function a() {}
}
は、インタプリタによって次のように書き換えられます。
function b() {
function a() {}
a = 10;
return;
}
変だろう?
また、この例では
function a() {}
と同じ振る舞いをします。
var a = function () {};
要するに、このコードはこうなっているわけです。
var a = 1; //defines "a" in global scope
function b() {
var a = function () {}; //defines "a" in local scope
a = 10; //overwrites local variable "a"
return;
}
b();
alert(a); //alerts global variable "a"
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JSのDateからDay名
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる