js関数に関する知識点をまとめます.
2479 ワード
jsでは、参照タイプは、Object、data、Aray、reは、コードgExp、Functを入力してください.5種類の参照タイプが含まれています.今日はFunctionというデータ構造について話します.
js種の関数は実際にはオブジェクトであり、各関数はFunctionタイプの例である.他の参照タイプと同様に、属性と方法があります.
1.関数の定義にはいくつかの方法があります.
1)関数宣言文法の定義
注意関数式の後にセミコロンがあります.
コンストラクタを使って任意の数のパラメータを受け取ることができますが、最後のパラメータは常に関数体と見なされます.前のパラメータは一枚がパラメータを挙げています.
関数名は関数を指すポインタだけなので、関数名とオブジェクトポインタを含む他の変数はあまり変わりません.つまり、一つの関数には複数の名前があるかもしれません.ここで関数宣言と関数表現にはどんな違いがありますか?
解析器が実行環境にデータをロードする場合は、関数宣言と関数表現は異なります.解析器はまず関数宣言を読み取り、この関数宣言コードを任意のコードの前に呼び出すことができます.これは私たちが普段言っている関数声明の向上です.関数の表現は違っています.彼は関数解析器が彼のいるコードブロックに実行されるまでは、本当に実行されます.次の2つの例を比較します.
同じ名前の関数が2つ宣言された場合、前の関数を後の関数がカバーします.
this、argmentsを含みます.
具体的には述べない.
4.関数の属性と方法
関数は2つの属性、lengthとprototypeがあります.
length表現関数は、名前付きパラメータを受信したい個数を表します.
各関数には2つの非継承の方法が含まれています.
これらの2つの方法の用途はいずれも特定の作用領域で関数を呼び出すもので、関数内のthisの値を設定するものです.
まずは.2つのパラメータをapply()方法で受信し、1つは関数動作のスコープであり、もう1つはパラメータ配列であり、2番目のパラメータは配列の例であっても良いし、アーグメンントであっても良い.
callとappyを使ってスコープを拡充する最大の利点は、オブジェクトがいかなる方法でも結合しないことです.
js種の関数は実際にはオブジェクトであり、各関数はFunctionタイプの例である.他の参照タイプと同様に、属性と方法があります.
1.関数の定義にはいくつかの方法があります.
1)関数宣言文法の定義
function sum(num1,num2){
return num1+num2;
}
2)関数式注意関数式の後にセミコロンがあります.
var sum=function(num1,num2){
return num1+num2;
}
Functionコンストラクタを使うコンストラクタを使って任意の数のパラメータを受け取ることができますが、最後のパラメータは常に関数体と見なされます.前のパラメータは一枚がパラメータを挙げています.
var sum=new Function("num1","num2","return num1+num2")
もちろん第三の方法は友好的ではありません.関数名は関数を指すポインタだけなので、関数名とオブジェクトポインタを含む他の変数はあまり変わりません.つまり、一つの関数には複数の名前があるかもしれません.ここで関数宣言と関数表現にはどんな違いがありますか?
解析器が実行環境にデータをロードする場合は、関数宣言と関数表現は異なります.解析器はまず関数宣言を読み取り、この関数宣言コードを任意のコードの前に呼び出すことができます.これは私たちが普段言っている関数声明の向上です.関数の表現は違っています.彼は関数解析器が彼のいるコードブロックに実行されるまでは、本当に実行されます.次の2つの例を比較します.
console.log(sum(10,10));
function sum(n1,n2){
return n1+n2;
}
!
console.log(sum(10,10));
var sum=function(n1,n2){
return n1+n2;
}
!
2.関数は再ロードされていません.同じ名前の関数が2つ宣言された場合、前の関数を後の関数がカバーします.
function sun(a){
return a+100;
}
function sun(a){
return a+200;
}
var result=sum(2)//202
3.関数の内部属性this、argmentsを含みます.
具体的には述べない.
4.関数の属性と方法
関数は2つの属性、lengthとprototypeがあります.
length表現関数は、名前付きパラメータを受信したい個数を表します.
function a(name){
//todo
}
function b(name,age){
//todo
}
function c(){
//todo
}
a.length //1
b.length //2
c.length //0
prototype属性は引用タイプにとって重要であり、専門的な説明があります.ここではこれ以上説明しません.各関数には2つの非継承の方法が含まれています.
これらの2つの方法の用途はいずれも特定の作用領域で関数を呼び出すもので、関数内のthisの値を設定するものです.
まずは.2つのパラメータをapply()方法で受信し、1つは関数動作のスコープであり、もう1つはパラメータ配列であり、2番目のパラメータは配列の例であっても良いし、アーグメンントであっても良い.
function sum(num1,num2){
return num1+num2;
}
function test1(a,b){
return sum.apply(this,arguments);
}
function test2(c,d){
return sum.apply(this.[c,d]);
}
console.log(test1(1,1)) //2
console.log(test2(1,1)) //2
call方法とappy方法はあまり違いません.違いは、callメソッドの2番目のパラメータを転送しなければならないパラメータを一つ一つ列挙します.callとappyを使ってスコープを拡充する最大の利点は、オブジェクトがいかなる方法でも結合しないことです.