JavaScriptの関数の定義を深く理解する


関数については、みんなよく知っています.jsの中で一番面白い部分です.クローズド、継承、匿名の関数です.
Functionタイプの例
各関数はFunctionタイプの例ですので、関数はすべてオブジェクトです.関数名はオブジェクトを指すポインタです.基本タイプの値のように関数と結合されていません.
function add(num1,num2){
	return num1+num2;
}
console.log(add(1,2));   //3

var add2=add;
console.log(add2(1,2));  //3

add=null;
console.log(add2(1,2));  //3
関数の定義
関数の定義には、一般的に次の2つの方法があります.関数宣言と関数定義式です.
関数宣言:
function add(num1,num2){
	return num1+num2;
}
関数定義式:定義関数の最後にセミコロンがあることに注意する.
var add=function(num1,num2){
	return num1+num2;
};
にはFunction構成関数を使用するものもありますが、少なくとも2つのコードを解析します.国語の影響性能、可読性も前の2つの強いものはありません.
var add=new Function("num1","num2","return num1+num2");
実は関数宣言と関数表現ルームメイトは少しずつ違います.それは関数宣言形式で定義された関数です.
最初の方法で定義された関数は、まず関数宣言を読み取り、コードを実行する前に使用できるようにします.第二の方法で定義された関数は、解像度が彼のコード行に実行されるまで、解釈されて実行される必要があります.
/*    */
alert(add(1,2));    //      3
function add(num1,num2){
	return num1+num2;
}
/*       */
alert(add(1,2));    //  
var add=function(num1,num2){
	return num1+num2;
}
これは変数のリフティングに似ていますが、大丈夫です.変数の声明がアップグレードされたのは、jsにはブロックレベルのスコープがないからです.代わりに関数のスコープがあるので、変数は関数全体に定義されています.
関数の宣言の昇格は、2番目の関数で表現を定義します.
関数は初期化されたステートメントの中で関数のあるステートメントに実行されていません.addは関数への参照を保存していません.