javascript Function関数理解と実戦
2427 ワード
Function関数はjavascriptの基礎であり、機能を実現する一つの起爆点でもあります。実例分析を通じてFunction関数に対してより深い理解と実際の使い方を説明してくれます。
Functionは確かにオブジェクトです。私たちが定義している関数はいずれもFunctionオブジェクトの一例です。Functionオブジェクトを指す例としても理解できます。
オブジェクトの一例である以上、Functionタイプの参照を指しています。参照タイプのメモリアドレスを指している以上、簡単に私たちが定義した関数を変数として理解することもできます。この変数は参照タイプのアドレスを指しています。このアドレスはFunctionオブジェクトの一例を指しています。
私たちが定義した関数が変数である以上、この関数のインスタンスアドレスは複数の変数を同時に指すことができます。
下のコードを見てください
var add=new Function(“n”、“m”、“return n+m”);
上記は標準的な関数定義で、Functionオブジェクトのコンストラクタを呼び出しました。このコンストラクタは前のNパラメータを新しい関数のパラメータとしてデフォルトにしています。最後のパラメータが新しい関数の関数として認識されるまで。
上の文から非常に直観的にaddという変数がFunctionタイプの例を指しているが、このネーミング方法は非常に複雑であり、等価である。
(1)関数式
しかし、最初の定義方法は、addが関数のインスタンスを指す変数であることを直感的に見ることができる。
変数である以上、他の変数に値を割り当てることができます。パラメータとして関数に渡すこともできます。関数から返すこともできます。
だからvar add 2=add 3=add;現在、三つの変数はこの実例の参照を指しています。今はadd=nullです。後のadd 2、add 3の関数は、関数オブジェクトの参照を除去した後、nullの参照を指しているので、add 2とadd 3の2つの関数にはまったく影響を及ぼさないで使用することができます。
したがって、関数は他の関数のパラメータとして伝えられます。
関数は関数の戻り値として返されます。
関数名は関数のインスタンスを指す変数にすぎないので、javascriptの関数には重荷重がありません。同じ変数が同じ参照アドレスを指しています。最後に示すのは同じ関数です。
関数は対象の実例である以上、属性があるべきです。方法があります。だから、javascriptの関数には属性があります。
重要な4つの属性のアーグメンント、this、length、prototype
argmentsは現在の関数のパラメータ配列を表しています。この属性はとても特殊です。彼自身はcaleeという属性があります。
アーグメンツ.callee属性は、このアーグメンツ属性を持つ関数エンティティ(すなわち関数名に相当)を指しているポインタを保存しています。
this属性は現在の環境で、C〓の中のthisと似ています。現在の文脈を表します。
length属性は、現在の関数が受信する最大パラメータの個数を表します。
プロトタイプは、この関数のプロトタイプ、つまり対象インスタンスの方法を完全に保存しています。つまりプロトタイプの方法は継承されています。例えば、tostring valueOf()などです。
次に、関数の種類を見てみましょう。
一般関数:一般関数の特性を紹介します。同名のカバー、アーグメンントオブジェクト、標準の戻り値などです。
Functionは確かにオブジェクトです。私たちが定義している関数はいずれもFunctionオブジェクトの一例です。Functionオブジェクトを指す例としても理解できます。
オブジェクトの一例である以上、Functionタイプの参照を指しています。参照タイプのメモリアドレスを指している以上、簡単に私たちが定義した関数を変数として理解することもできます。この変数は参照タイプのアドレスを指しています。このアドレスはFunctionオブジェクトの一例を指しています。
私たちが定義した関数が変数である以上、この関数のインスタンスアドレスは複数の変数を同時に指すことができます。
下のコードを見てください
var add=new Function(“n”、“m”、“return n+m”);
上記は標準的な関数定義で、Functionオブジェクトのコンストラクタを呼び出しました。このコンストラクタは前のNパラメータを新しい関数のパラメータとしてデフォルトにしています。最後のパラメータが新しい関数の関数として認識されるまで。
上の文から非常に直観的にaddという変数がFunctionタイプの例を指しているが、このネーミング方法は非常に複雑であり、等価である。
(1)関数式
var add=function(n,m){
return n+m;
}
(2)関数の説明
function add(n,m){
return n+m;
}
javascript言語の中の申明が前倒ししているため、一版は第二の方法で関数を定義することを提唱しています。しかし、最初の定義方法は、addが関数のインスタンスを指す変数であることを直感的に見ることができる。
変数である以上、他の変数に値を割り当てることができます。パラメータとして関数に渡すこともできます。関数から返すこともできます。
だからvar add 2=add 3=add;現在、三つの変数はこの実例の参照を指しています。今はadd=nullです。後のadd 2、add 3の関数は、関数オブジェクトの参照を除去した後、nullの参照を指しているので、add 2とadd 3の2つの関数にはまったく影響を及ぼさないで使用することができます。
したがって、関数は他の関数のパラメータとして伝えられます。
関数は関数の戻り値として返されます。
関数名は関数のインスタンスを指す変数にすぎないので、javascriptの関数には重荷重がありません。同じ変数が同じ参照アドレスを指しています。最後に示すのは同じ関数です。
関数は対象の実例である以上、属性があるべきです。方法があります。だから、javascriptの関数には属性があります。
重要な4つの属性のアーグメンント、this、length、prototype
argmentsは現在の関数のパラメータ配列を表しています。この属性はとても特殊です。彼自身はcaleeという属性があります。
アーグメンツ.callee属性は、このアーグメンツ属性を持つ関数エンティティ(すなわち関数名に相当)を指しているポインタを保存しています。
this属性は現在の環境で、C〓の中のthisと似ています。現在の文脈を表します。
length属性は、現在の関数が受信する最大パラメータの個数を表します。
プロトタイプは、この関数のプロトタイプ、つまり対象インスタンスの方法を完全に保存しています。つまりプロトタイプの方法は継承されています。例えば、tostring valueOf()などです。
次に、関数の種類を見てみましょう。
一般関数:一般関数の特性を紹介します。同名のカバー、アーグメンントオブジェクト、標準の戻り値などです。
function ShowName(name) {
alert(name);
}
匿名関数:匿名関数の特性を紹介します。変数の匿名関数、名前のない匿名関数。
// , 、
var anonymousNormal = function (p1, p2) {
alert(p1+p2);
}
anonymousNormal(3,6);// 9
クローズド関数:クローズド関数の特性を紹介します。
function funA() {
var i = 0;
function funB() { // funB
i++;
alert(i)
}
return funB;
}
var allShowA = funA(); // : 1,2,3,4
function partShowA() {
var showa = funA();// : 1
showa();
}