Javascript関数と変数のアップグレード
2388 ワード
変数の昇格と関数の昇格は基本的に面接試験で必ずテーマを聞きます.
変数とよく定義されていることを知っていますが、スコープの一番前に引き上げられます.
唯一の確認が必要なのは変数と関数の順序です.
私たちは関数が第一公民で一番前に上がると予想していますか?
//undefined/undefined/エラーが発生しました.
理由関数は上のvarにあります.最初のconsolineの時にaは値を与えませんでした.その結果はundefinedで、ifはfalseのために最後のconsolieだけが残っています.undefinedも最後のa is not a functionです.
でも結果は
私は機知がありますが、予想が間違っていますか?
ブラウザの実行結果:大丈夫です.
ここですべての完璧さを見ましたが、やはり高品質の文章を探し直しました.私が間違っていたことを発見しました.実行結果は正しいですが、ブラウザと人工解析はやはり違っています.私たちが最初に予想した通り、関数優先です.
変数と関数というタイトルが出ましたので、一緒に言います.
正しい解析の順番はこうです.
同じ名前の変数と関数は、関数が一番前に上がって、変数の次に、なぜ結果が私達の人工的なundefinedではないですか?変数が無視されるのは無視されるからです.
まだありますか?はい、同じ名前の変数はどの順番で、同じ名前の関数はどの順番ですか?
同名の変数
同名の関数
同じ名前の関数が上書きされると思います.
やっと終わった
ご賞賛は私の継続の原動力です.ありがとうございます.
//
console.log(a)
if (a) {
var a = 1;
console.log(a)
}
function a() {
console.log(this);
}
console.log(a);
a()
この栗について解析してみます.変数とよく定義されていることを知っていますが、スコープの一番前に引き上げられます.
唯一の確認が必要なのは変数と関数の順序です.
私たちは関数が第一公民で一番前に上がると予想していますか?
//
function a() {
console.log(this);
}
var a;
console.log(a)
if (a) {
a = 1;
console.log(a)
}
console.log(a);
a()
私達が予想した解析結果は//undefined/undefined/エラーが発生しました.
理由関数は上のvarにあります.最初のconsolineの時にaは値を与えませんでした.その結果はundefinedで、ifはfalseのために最後のconsolieだけが残っています.undefinedも最後のa is not a functionです.
でも結果は
私は機知がありますが、予想が間違っていますか?
//
var a;
function a() {
console.log(this);
}
console.log(a)
if (a) {
a = 1;
console.log(a)
}
console.log(a);
a()
そうですか?比較した結果、人工解析の結果、1、a()2、13、14、a()のエラーが発生しました.ブラウザの実行結果:大丈夫です.
ここですべての完璧さを見ましたが、やはり高品質の文章を探し直しました.私が間違っていたことを発見しました.実行結果は正しいですが、ブラウザと人工解析はやはり違っています.私たちが最初に予想した通り、関数優先です.
変数と関数というタイトルが出ましたので、一緒に言います.
//
function a(){ console.log(a) }
console.log(a)
var a = 1
a()
まず上に述べました.私たちの予想と考えは間違っています.正しい解析の順番はこうです.
function a(){ console.log(a) }
var a;
console.log(a)
a = 1
a()
しかし、これは重要なブラウザで実行された結果です.これは私が知っている原理を説明します.同じ名前の変数と関数は、関数が一番前に上がって、変数の次に、なぜ結果が私達の人工的なundefinedではないですか?変数が無視されるのは無視されるからです.
function a(){ console.log(a) }
var a;//
console.log(a) //
a = 1
a()// a is not a function
パーフェクトまだありますか?はい、同じ名前の変数はどの順番で、同じ名前の関数はどの順番ですか?
同名の変数
console.log(a)
var a = 1
console.log(a)
var a = 2
console.log(a)
//
var a;
var a; //
console.log(a) // undfined
a = 1
console.log(a) //1
a = 2
console.log(a)//2
*同じ名前の変数は、ステートメントがアップされ、後に無視されます.同名の関数
function a(){console.log(1)}
console.log(a)
function a(){console.log(2)}
console.log(a)
a()
//
function a(){console.log(1)}
function a(){console.log(2)}
console.log(a)
console.log(a)
a()
実行結果同じ名前の関数が上書きされると思います.
やっと終わった
ご賞賛は私の継続の原動力です.ありがとうございます.