[解決済み] なぜ私のJavaScriptの関数名は衝突するのでしょうか?
2023-01-19 21:41:02
質問
ある変数と、ある関数が代入されている関数とが名前を衝突させるとどうなるかを見るために、次のようなスクリプトを書きました。
var f = function() {
console.log("Me original.");
}
function f() {
console.log("Me duplicate.");
}
f();
出力されるのは "私オリジナル." なぜ他の関数が呼ばれなかったのでしょうか?
また、元の割り当てを
var f = new function() {
に変更すると、"Me original" が表示され、その後に TypeError が表示されます。
object is not a function
. 誰か説明してください。
どのように解決するのですか?
JavaScriptでは関数宣言はhoisted(先頭に移動)されます。パース順は間違っていますが、関数宣言はホイストされているので、あなたのコードは意味的には次のコードと同じです。
function f() {
console.log("Me duplicate.");
}
var f = function() {
console.log("Me original.");
}
f();
というのは、順番に、関数の名前を除いて同じです。
var f = function() {
console.log("Me duplicate.");
}
var f = function() {
console.log("Me original.");
}
f();
と同じになるのは、可変ホイストのせいです。
var f;
f = function() {
console.log("Me duplicate.");
}
f = function() {
console.log("Me original.");
}
f();
これは、関数をオーバーライドしていることを説明しています。より一般的には、複数の
var
の宣言は、JavaScript では許可されています。
var x = 3; var x = 5
は完全に合法です。新しい ECMAScript 6 標準では
let
ステートメントがこれを禁じています。
この記事 は、javascript の関数を理解する上で素晴らしい仕事をしています。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] 各オブジェクトに?重複
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] Javascriptの関数スコープとホイスト