ホームページ ウェブフロントエンド jsチュートリアル jsでの変数宣言と関数宣言のプロモーションの詳細な分析(例付き)

jsでの変数宣言と関数宣言のプロモーションの詳細な分析(例付き)

Aug 23, 2018 pm 02:16 PM
関数宣言 変数宣言

この記事では、js での変数宣言と関数宣言の改善について詳しく説明します (例付き)。必要な方は参考にしていただければ幸いです。

変数宣言の改善
1. 変数定義
変数に値が割り当てられていない場合、変数の初期値は未定義になります。

2. 変数スコープ
変数スコープとは、変数が機能するスコープを指します。変数はグローバル変数とローカル変数に分けられます。グローバル変数はグローバルに定義されますが、ローカル変数は関数内でのみ有効です。
関数本体では、同じ名前のローカル変数またはパラメータがグローバル変数よりも優先されます。つまり、関数内にグローバル変数と同じ名前のローカル変数またはパラメーターが存在する場合、グローバル変数はローカル変数によって上書きされます。
varなしで定義された変数はすべてグローバル変数とみなされます

3. 関数のスコープと事前宣言
JavaScriptの関数効果とは、関数内で宣言されたすべての変数が常に関数本体で定義されることを意味します。変数は、宣言される前に使用できます。この機能は宣言ホイスティングと呼ばれます。つまり、JavaScript 関数内のすべての宣言 (宣言のみで代入は含まれません) が関数本体の先頭に進みますが、変数代入操作は関数本体の先頭に残ります。関数本体の位置。次の例のようになります。
注: 事前の宣言は、コードの実行が開始される前に、JavaScript エンジンのプリコンパイル中に実行されます。

var scope = 'global';function f(){
    console.log(scope);    
    var scope = 'local';
    console.log(scope);
}
ログイン後にコピー

関数内の宣言プロモーションにより、上記のコードは実際には次のようになります

var scope = 'global';function f(){
    var scope;    //变量声明提升到函数顶部
    console.log(scope);
    scope = 'local';    //变量初始化依然保留在原来的位置
    console.log(scope);
}
ログイン後にコピー

このような変換の後、答えは非常に明白です。最初の console.log(scope) ステートメントの前にスコープが定義されていますが、値が割り当てられていないため、この時点では 2 番目の console.log(scope) ステートメントの前にスコープ参照が定義されていません。値が「local」であるため、出力結果はローカルになります。

関数宣言の改善
関数宣言構文

f('superman');function f(name){
    console.log(name);
}
ログイン後にコピー

関数式構文

f('superman');var f= function(name){
    console.log(name);
}
ログイン後にコピー

上記のコードを実行すると、Uncaught ReferenceError: f is not generated(…)というエラーが報告され、fが定義されていないことがエラーメッセージに表示されます。定義されています。
同じコード内の関数宣言と関数式に違いがあるのはなぜですか?
これは、関数宣言には関数宣言ホイスティングという非常に重要な機能があるためです。関数宣言ステートメントは外部スクリプトまたは外部関数スコープの先頭にホイスティングされます (変数ホイスティングとよく似ています)。この機能により、関数宣言をそれを呼び出すステートメントの後に配置できます。以下の例のように、最終出力はどうなるでしょうか? :

var getName = function(){
    console.log(2);
}function getName (){
    console.log(1);
}
getName();
ログイン後にコピー

最終的な出力結果が1だと思う人もいるかもしれません。この例には、変数宣言のプロモーションと関数宣言のプロモーションが含まれています。関数宣言の昇格で前述したように、関数宣言関数 getName(){} が先頭に進みます。関数式 var getName = function(){} は、変数宣言の昇格を示します。したがって、この場合、getName も変数であるため、この変数の宣言も最後に移動しますが、変数の割り当ては元の位置に残ります。関数が優先されることに注意してください。関数宣言と変数宣言の両方がプロモートされますが、関数が最初にプロモートされ、次に変数がプロモートされます。したがって、上記の関数は次のように変換できます:

function getName(){    //函数声明提升到顶部
    console.log(1);
}
var getName;    //变量声明提升
getName = function(){    //变量赋值依然保留在原来的位置
    console.log(2);
}
getName();    // 最终输出:2
ログイン後にコピー

したがって、最終的な出力は次のようになります: 2.元の例では、関数宣言が関数式の後にありますが、関数宣言が先頭に昇格しているため、その後の関数式の代入演算でgetNameが上書きされ、2が出力されます。

関連するおすすめ:



以上がjsでの変数宣言と関数宣言のプロモーションの詳細な分析(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 関数宣言のデフォルト パラメーター: それらの宣言と使用法の包括的な分析 C++ 関数宣言のデフォルト パラメーター: それらの宣言と使用法の包括的な分析 May 02, 2024 pm 03:09 PM

C++ のデフォルト パラメーターは、関数パラメーターのデフォルト値を指定する機能を提供するため、コードの読みやすさ、単純さ、柔軟性が向上します。デフォルトのパラメータを宣言する: 関数宣言のパラメータの後に「=」記号を追加し、その後にデフォルト値を追加します。使用法: 関数が呼び出されるとき、オプションのパラメーターが指定されていない場合は、デフォルト値が使用されます。実際のケース: 2 つの数値の合計を計算する関数。1 つのパラメーターは必須で、もう 1 つはオプションであり、デフォルト値は 0 です。利点: 可読性の向上、柔軟性の向上、定型コードの削減。注: これは宣言でのみ指定でき、最後に指定する必要があり、型に互換性がある必要があります。

C++ 関数の宣言と定義の順序はどのような影響を与えますか? C++ 関数の宣言と定義の順序はどのような影響を与えますか? Apr 19, 2024 pm 01:42 PM

C++ では、関数の宣言と定義の順序がコンパイルとリンクのプロセスに影響します。最も一般的なのは、宣言が最初にあり、定義が後に来ることです。「forwarddeclaration」を使用して、定義を宣言の前に置くこともできます。両方が同時に存在する場合、コンパイラは宣言を無視し、定義のみを使用します。

C++ コードでの「エラー: 宣言されていない識別子 '変数' の使用」問題を解決する C++ コードでの「エラー: 宣言されていない識別子 '変数' の使用」問題を解決する Aug 26, 2023 pm 01:46 PM

C++ コードでの「error:useofundeclaredidentifier'variable'」問題の解決 C++ でプログラミングする場合、さまざまなエラーが発生することがよくあります。よくあるエラーの 1 つは、「error:useofundeclaredidentifier'variable'」です。このエラーは通常、コード内で宣言されていない変数を使用していることを意味します。この記事では詳しく説明します

C++ 関数の宣言と定義の違いは何ですか? C++ 関数の宣言と定義の違いは何ですか? Apr 18, 2024 pm 04:03 PM

関数宣言はコンパイラに関数の存在を通知しますが、型チェックに使用される実装は含まれません。関数定義は、関数本体を含む実際の実装を提供します。主な特徴には、目的、場所、役割が含まれます。違いを理解することは、効率的で保守可能な C++ コードを作成するために重要です。

C++ 関数の宣言と定義 C++ 関数の宣言と定義 Apr 11, 2024 pm 01:27 PM

C++ では関数の宣言と定義が必要です。関数宣言には関数の戻り値の型、名前、パラメーターが指定され、関数定義には関数の本体と実装が含まれます。まず関数を宣言し、それをプログラム内で使用して必要なパラメータを渡します。 return ステートメントを使用して、関数から値を返します。

C++ コンパイル エラー: 関数呼び出しが関数宣言と一致しません。解決方法は? C++ コンパイル エラー: 関数呼び出しが関数宣言と一致しません。解決方法は? Aug 22, 2023 pm 12:39 PM

C++ コンパイル エラー: 関数呼び出しが関数宣言と一致しません。解決方法は? C++ プログラムを開発する場合、必ずコンパイル エラーが発生します。一般的なエラーの 1 つは、関数呼び出しが関数宣言と一致しないことです。この種のエラーは C++ プログラマの間で広く存在しており、関数宣言の正確さに注意を払わないためにコンパイルの問題が発生し、最終的には問題の解決に時間と労力を浪費し、開発効率に影響を及ぼします。この間違いを回避するには、いくつかの規範と標準的な慣行に従う必要があります。以下でそれらを見てみましょう。関数呼び出しと関数宣言とは何ですか?

C++ 関数宣言の [[nodiscard]]: 戻り値を無視した場合の結果をわかりやすく説明する C++ 関数宣言の [[nodiscard]]: 戻り値を無視した場合の結果をわかりやすく説明する May 01, 2024 pm 06:18 PM

[[nodiscard]] 属性は、関数の戻り値を無視してはならないことを示します。無視しないと、初期化されていない例外、メモリ リーク、不正な計算結果などの結果を防ぐためにコンパイラの警告またはエラーが発生します。

PHPでの変数の使い方 PHPでの変数の使い方 May 20, 2023 pm 02:33 PM

PHP は、開発者がサーバー側で動的な Web アプリケーションを作成できるようにする非常に人気のある Web 開発言語です。 PHP では、変数は値とデータを保存するために使用される基本的なデータ構造です。この記事ではPHPでの変数の使い方を紹介します。変数の基本構文 PHP で変数を宣言する構文は非常に簡単です。変数名はドル記号 ($) で始まり、その後に変数名が続きます。変数名には文字、数字、またはアンダースコアを組み合わせることができますが、文字またはアンダースコアで始まる必要があります。たとえば、次のコードは名前を宣言します。

See all articles