JavaScript_javascript スキルにおける同じ名前の識別子の優先順位の簡単な分析

WBOY
リリース: 2016-05-16 17:10:31
オリジナル
1265 人が閲覧しました

1. ローカル変数は最初に使用されてから宣言され、同じ名前の外部変数には影響しません

コードをコピーします コードは次のとおりです:

var x = 1; // --> 外部変数 x
function fn(){
warning(x); / --> 未定義のローカル変数を最初に使用します
var x = 2 // 次に宣言して割り当てます
}
alert(x); 1


最初の点、関数 fn の最初の文は x を出力し、x は 2 番目の文で定義されます。これは JS では許可されており、ここで許可されているということは、プログラムが構文エラーなしで実行できることを意味します。
ただし、C や Java などの他の言語では許可されません。


コードをコピー など、変数は使用前に宣言する必要があります。 コードは次のとおりです:
public class Test {
public static void main(String[] args) {
System.out.println(x); // 最初に
を使用します int x = 10; // 次に
を宣言します }
}

Java のコンパイラではエラーが表示され、プログラムは実行できません。
2 番目の点は、関数 fn 内のローカル変数 x は外部変数 x に影響を与えません。つまり、fn のアラート出力は 1 ではなく、未定義になります。

2 番目に、仮パラメータは関数名よりも優先されます

function fn(fn){
alert(fn);
}
fn('hello');

関数名と仮パラメータは fn と同じ名前であり、出力は文字列 "hello" ですが、関数本体 (fn.toString()) ではないことがわかります。 ) 関数 fn の。

3 つは、仮パラメータは引数よりも優先されます

コードをコピー コードは次のとおりです。
関数 fn(引数){
アラート(引数)
}
fn('hello'); // "hello"


arguments オブジェクトは関数内で直接使用でき、言語自体によって提供される特別な識別子です。
ここでは、仮パラメータが同じ名前で宣言されています。出力が「[object Object]」ではなく「hello」であることがわかります。つまり、仮パラメータの引数が、言語自体によって提供される実際の引数をカバーしています。

第 4 に、仮パラメータは、宣言されていても割り当てられていないローカル変数よりも優先されます

コードをコピー コードは次のとおりです。 // - -> "hello"
関数 fn の仮パラメータは a です。関数の最初の文はローカル変数 a を宣言するだけで、値は割り当てられません。出力結果が未定義ではなく「hello」であることから、宣言されただけで値が代入されていないローカル変数 a よりも仮パラメータ a の方が優先度が高いことがわかります。


5. 宣言および割り当てられたローカル変数は仮パラメータよりも優先されます



コードをコピー


関数 fn(a){ var a = 1; アラート(a); // - -> "1" 関数 fn の仮パラメータは a です。関数の最初の文はローカル変数 a を宣言し、それに値 1 を割り当てるだけです。出力結果が「hello」ではなく「1」であることから、宣言して代入したローカル変数 a が仮パラメータ a よりも優先度が高いことがわかります。

6. 仮パラメータが同じ名前のローカル変数に代入されている場合




コード

コードは次のとおりです:
function fn(a){

var a = a; alter(a); } fn('hello ');
まだ実行しないで、結果を推測してください。ポイント 5 に従う場合: 宣言および割り当てられたローカル変数は、仮パラメータよりも優先されます。その場合、 a は未定義になります。しかし実際には、a は「hello」です。つまり、右側の a は仮パラメータ a、左側の a はローカル変数 a です。



ここでの 2 つの a は互いに干渉せず、どちらも他方を覆い隠しません。これは、先ほど述べたことと矛盾しています。割り当てられたローカル変数は、仮パラメータよりも優先されます。しかし、var a = a の後に a が未定義になることは望ましくないので、エンジンは私たちが望んでいることを実行します。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート