javascript function(関数タイプ)使用と注意事項のまとめ
5611 ワード
本論文の実例は、javascript function(関数タイプ)の使用と注意事項を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
ECMAScriptでは、Functionタイプが実際に対象です。各関数は、Functionタイプの例であり、他の参照タイプと同様に属性と方法を有する。関数はオブジェクトなので、関数名は実際に関数オブジェクトを指すポインタでもあります。
学習のポイント:
1.関数の宣言方法
2.値の関数として
3.関数の内部属性
4.関数の属性と方法
一.関数の宣言方式
1.一般的な関数宣言
二.値の関数として
ECMAScriptの関数名自体が変数ですので、関数は値としても使えます。つまり、伝達パラメータのように一つの関数を別の関数に渡すだけでなく、一つの関数を別の関数の結果として返すことができます。
関数の内部には、二つの特殊なオブジェクトがあります。argmentsは、入力関数のすべてのパラメータを含むクラスの配列オブジェクトで、主な用途は保存関数パラメータです。しかし、このオブジェクトにはもう一つのcaleeという属性があります。この属性はポインタで、このargmentsオブジェクトを持つ関数を指します。
ECMAScriptの関数は対象ですので、関数にも属性と方法があります。各関数には二つの属性があります。lengthとprototype。ここで、length属性は、関数が受信したいネーミングパラメータの個数を表している。
もっと多くのJavaScriptに関する内容は当駅のテーマを調べられます。「JavaScript常用関数技術のまとめ」、「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。
ECMAScriptでは、Functionタイプが実際に対象です。各関数は、Functionタイプの例であり、他の参照タイプと同様に属性と方法を有する。関数はオブジェクトなので、関数名は実際に関数オブジェクトを指すポインタでもあります。
学習のポイント:
1.関数の宣言方法
2.値の関数として
3.関数の内部属性
4.関数の属性と方法
一.関数の宣言方式
1.一般的な関数宣言
function box(num1, num2) {
return num1+ num2;
}
2.変数初期化関数を使用する
var box= function(num1, num2) {
return num1 + num2;
};
3.Functionコンストラクターを使用する
var box= new Function('num1', 'num2' ,'return num1 + num2');
PS:第三の方法は紹介しないです。このような文法は2つのコードを解析することになります。(最初の解析は従来のECMAScriptコードで、2番目は構造関数に入ってきた文字列を解析することです。)ので、性能に影響を与えます。しかし、「関数はオブジェクトであり、関数名はポインタである」という概念はこの文法によって理解できます。二.値の関数として
ECMAScriptの関数名自体が変数ですので、関数は値としても使えます。つまり、伝達パラメータのように一つの関数を別の関数に渡すだけでなく、一つの関数を別の関数の結果として返すことができます。
function box(sumFunction, num) {
return sumFunction(num); //someFunction
}
function sum(num) {
return num + 10;
}
var result = box(sum, 10); //
三.関数の内部属性関数の内部には、二つの特殊なオブジェクトがあります。argmentsは、入力関数のすべてのパラメータを含むクラスの配列オブジェクトで、主な用途は保存関数パラメータです。しかし、このオブジェクトにはもう一つのcaleeという属性があります。この属性はポインタで、このargmentsオブジェクトを持つ関数を指します。
function box(num) {
if (num <= 1) {
return 1;
} else {
return num * box(num-1); //
}
}
階乗関数については、一般的に再帰的アルゴリズムを使用するので、関数内部では必ず自身を呼び出します。関数名を変更しないなら大丈夫ですが、関数名を変更すると内部の呼び出しは一々変更されます。この問題を解決するために、私たちはarguments.callee
を使って代替できます。
function box(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num-1);// callee
}
}
関数の内部にあるもう一つの特殊なオブジェクトは、JavaとC〓の中のthisとほぼ似ている。言い換えれば、thisが引用するのは、動作を実行するための関数のオブジェクト、または関数呼び出しのステートメントにおけるそのスコープです。PS:グローバルスコープで関数を呼び出すと、thisオブジェクトがwindowを参照します。
//
window.color = ' '; // , var color = ' ';
alert(this.color); // color
var box = {
color : ' ', // color
sayColor : function () {
alert(this.color); // this box color
}
};
box.sayColor(); // color
alert(this.color); //
//
window.color = ' '; // var color = ' ';
var box = {
color : ' '
};
function sayColor() {
alert(this.color); // , box
}
getColor();
box.sayColor = sayColor; // box ,
box.sayColor();
四.関数の属性と方法ECMAScriptの関数は対象ですので、関数にも属性と方法があります。各関数には二つの属性があります。lengthとprototype。ここで、length属性は、関数が受信したいネーミングパラメータの個数を表している。
function box(name, age) {
alert(name + age);
}
alert(box.length); //2
PS:prototype属性については、すべての例示的な方法を保存する本当のところ、すなわちプロトタイプです。この属性は対象に向かって章で詳しく紹介します。prototypeの下には2つの方法があります。apply()
とcall()
は、それぞれの関数がこの2つの非継承的な方法を含んでいます。これらの2つの方法の用途はいずれも特定の作用領域で関数を呼び出すが、実際には関数内のthisオブジェクトを設定する値に等しい。
function box(num1, num2) {
return num1 + num2; //
}
function sayBox(num1, num2) {
return box.apply(this, [num1, num2]); //this , window
} //[] box
function sayBox2(num1, num2) {
return box.apply(this, arguments); //arguments box
}
alert(sayBox(10,10)); //20
alert(sayBox2(10,10)); //20
call()
方法はapply()
方法と同じで、彼らの違いは単に受信パラメータの方式が異なるだけである。call()
方法に対して、最初のパラメータは作用領域であり、変化はなく、残りのパラメータは直接関数に伝達されるだけである。
function box(num1, num2) {
return num1 + num2;
}
function callBox(num1, num2) {
return box.call(this, num1, num2); // apply
}
alert(callBox(10,10));
実際には、伝達パラメータはapply()
とcall()
の方法ではなく、実際の使用場所です。それらがよく使用される場所は、関数を拡張して動作させることができるスコープである。
var color = ' '; // window.color = ' ';
var box = {
color : ' '
};
function sayColor() {
alert(this.color);
}
sayColor(); // window
sayColor.call(this); // window
sayColor.call(window); // window
sayColor.call(box); // box,
この例は、以前の作用領域理解の例によって修正されたもので、我々はcall(box)
の方法を使用すると、sayColor()
の方法の実行環境がすでにboxオブジェクトの中に変化していることが分かります。call()
またはapply()
を使用して、スコープを拡張する最大の利点は、オブジェクトが方法との任意の結合関係(結合とは、相互に関連する意味であり、拡張と維持が連鎖反応することがある)を必要としないことである。つまり、boxオブジェクトとsayColor()
方法との間には、box.sayColor = sayColor;
などの余分な関連操作はありません。もっと多くのJavaScriptに関する内容は当駅のテーマを調べられます。「JavaScript常用関数技術のまとめ」、「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。