js boost

いわゆるjavascriptプロモーション

宣伝する

jsエンジンとコンパイラ

変数と関数を改善する方法、jsコードのコンパイル段階。

jsには、次のようなより古典的な問題があります。

	a = 10;
	console.log(a);
	var a;

または

	a = 10;
	var a;
	console.log(a);

彼は何を出力すると思いますか?未定義?ReferenceError?いいえ、いいえ、彼は10を表示します!なぜ私は後で言うでしょう。次の例を見てください。

	console.log(a);
	var a = 10;

これは何を示しますか?10?またはReferenceError?しかし、実際には、未定義が表示されます!

undefinedとReferenceErrorの違いについてお話しましょう。Undefinedは、変数が宣言されているが値がないことを意味しますが、それを格納するためにスコープ内に場所を開いています。 。

jsコードは実行前にコンパイラーによって1回コンパイルされるため、今回はすべての変数宣言と関数宣言(var a = 10;ステートメントなど)が事前に実行されます。あなたの意見では、これは単なるステートメントですが、システムでは2つに分かれていますvar a ; 和a=10;これはリフトと呼ばれているので、その前者は、事前に行われます。そして、jsの改善は地球環境だけでなく、あらゆる場面で有効です。
考える:

foo();
function foo () {
	console.log(a);// undefined;
	var a;
	a = 10;
}

このコードのfoo関数は事前に宣言されているため、foo();は通常どおり実行できます。ただし、事前に出力の前にvarが実行されるため、undefinedと表示されます。
つまり、コード全体は次の形式になります。

function () {
	var a;
	console.log(a);
	a = 10;
}
foo();

もう1つは関数の優先度です。関数の宣言は、次のような変数の宣言よりも優先されます。

foo();//2
var foo;
foo = function () {
	console.log(1);
}
function foo () {
	console.log(2)
};
20件のオリジナル記事を公開しました Likes5 訪問2076

おすすめ

転載: blog.csdn.net/qq_42859887/article/details/105347351