JavaScript関数の二つの声明方式
3004 ワード
1.関数宣言の方式
JavaScript宣言関数には二つの選択があります.関数宣言法、表現定義法.関数宣言法 表現定義法 2.二種類の関数宣言の違いをかく
解析器は、まず関数宣言(すなわち、関数宣言の優先度が高い)を読み取り、コードを実行する前にアクセスできます.関数式宣言については、解析器がコード行を実行するまでは自動的に昇格できません.
同じ関数は異なる定義方式を使います.呼び出し時には違った効果があります.
まず関数の声明を見ます.コードアップが発生したため、実際のコードは次の通りです.
JavaScriptは解釈型の言語ですが、プログレッシブに実行されているわけではありません.解析プロセスは、2つの段階として理解されることができる.一つは前処理段階であり、JavaScriptはシナリオコードをバイトコードに変換し、この過程で定義されたすべての変数をコードツリーの先端にアップグレードする.第二段階は、JavaScript解釈器が実行環境を介して、バイトコードを機械コードに生成し、その過程で変数の割当値が発生し、順次実行する.
var b=「Test」は2つの文に相当します.
var b;(undefined結果のソースは、最初の文を実行する前に解析されました)
b=「Test」
これもなぜですか?私たちは方法のステートメントの前に方法を呼び出すことができます.
4.練習する
次に私達は一つの経典的な面接問題の一部を使ってこの文章をまとめます.
すみません、このコードの実行結果は何ですか?
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えを発表します
4
ここでは主に第二問の中でなぜ4なのかを説明します.その他は後の文章で説明します.上のコードは実際にこのような形です.
JavaScript宣言関数には二つの選択があります.関数宣言法、表現定義法.
function sum (num1 ,num2){
return num1+num2
}
var sum = function(num1,num2){
return num1+num2
};
解析器は、まず関数宣言(すなわち、関数宣言の優先度が高い)を読み取り、コードを実行する前にアクセスできます.関数式宣言については、解析器がコード行を実行するまでは自動的に昇格できません.
同じ関数は異なる定義方式を使います.呼び出し時には違った効果があります.
//
var num = add(1, 2);
console.log(num);// 3
function add(a, b) {
return a + b
}
//
var num = add(1, 2);
console.log(num);//Uncaught TypeError: undefined is not a function
var add = function (a, b) {
return a + b
}
この二つの宣言方式はコードにどのような影響を与えているかを見てみます.まず関数の声明を見ます.コードアップが発生したため、実際のコードは次の通りです.
//
function add(a, b) {
return a + b
}
var num = add(1, 2);
console.log(num);// 3
//function add(a, b) {
// return a + b
//}
また、表式宣言法を見ても、同様に変数addを昇格させ、add()関数を呼び出した場合、変数addのみを宣言していますが、割り当ては行われません.(この時のadd変数はundefined)実際のコードは以下の通りです.//
var add;
var num = add(1, 2);
console.log(num);//Uncaught TypeError: undefined is not a function
add = function (a, b) {
return a + b
}
3.変数の昇格と実行手順についてJavaScriptは解釈型の言語ですが、プログレッシブに実行されているわけではありません.解析プロセスは、2つの段階として理解されることができる.一つは前処理段階であり、JavaScriptはシナリオコードをバイトコードに変換し、この過程で定義されたすべての変数をコードツリーの先端にアップグレードする.第二段階は、JavaScript解釈器が実行環境を介して、バイトコードを機械コードに生成し、その過程で変数の割当値が発生し、順次実行する.
console.log(a);
//Error:a is not defined , , ,
console.log(b) //undefined ,
var b="Test";
console.log(b);//Test
JavaScript値は最初の文を実行する前に関数/変数宣言を前処理しました.var b=「Test」は2つの文に相当します.
var b;(undefined結果のソースは、最初の文を実行する前に解析されました)
b=「Test」
これもなぜですか?私たちは方法のステートメントの前に方法を呼び出すことができます.
4.練習する
次に私達は一つの経典的な面接問題の一部を使ってこの文章をまとめます.
すみません、このコードの実行結果は何ですか?
function Foo() {
getName = function () {
alert (1);
};
return this;
}
Foo.getName = function () {
alert (2);
};
Foo.prototype.getName = function () {
alert (3);
};
var getName = function () {
alert (4);
};
function getName() {
alert (5);
}
getName()
答えのロード中…答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えのロード中…
答えを発表します
4
ここでは主に第二問の中でなぜ4なのかを説明します.その他は後の文章で説明します.上のコードは実際にこのような形です.
function Foo() {
getName = function () {
alert (1);
};
return this;
}
var getName;//
function getName() { // , var
alert (5);
}
Foo.getName = function () {
alert (2);
};
Foo.prototype.getName = function () {
alert (3);
};
getName = function () { // function getName
alert (4);
};
getName();// 4
ここでは関数宣言と関数式宣言、コードの実行順の基本的な知識を身につけましょう.批判の指針を歓迎します.