javascript:Functions(2)
5676 ワード
パラメータ
関数が呼び出されると、argments配列のパラメータが得られます.関数によって、関数定義時に定義されていない余分なパラメータを含むすべてのパラメータリストにアクセスできます.
このargmentsは本物の配列ではなく、lengthの属性だけがあり、indexを通して遍歴することができます.
リターン
return文は戻りに使います.
戻り値が指定されていない場合は、undefinedを返します.
関数がnewで呼び出され、戻り値がオブジェクトでない場合、thisを返します.
異常Exception
jsは関数の作用領域があるので、関数内に定義されるパラメータと変数は関数の外部では見られない.また、関数内の任意の位置で定義された変数は、この関数のどこにでも見られます.
jsでは、できるだけ遅くまで変数を説明しなくても、一番いい方法は関数の上部宣言関数で使用できるすべての変数です.
jsは二つの環境しかありません.一つはグローバル環境、一つは関数環境です.つまり、関数以外の場合、大かっこはドメインとして機能しません.外部環境では、大かっこ内の変数にアクセスできます.
関数内のthisは、関数の呼び出し方式に対してそれぞれ異なる意味を持つ.方法に対してモードを呼び出し、すなわち関数がオブジェクトである方法については、thisはオブジェクト自体を表します.関数コールモードでは、thisはすべてのオブジェクト、すなわちwindowです.コンストラクタ呼び出しモードに対して、thisはプロトタイプのオブジェクトです.Apple/call呼び出しに対して、thisは最初のパラメータで指定できます.
クローズド
作用領域の利点は内部の関数がそれらの外部関数を定義するパラメータと変数にアクセスできることである.
1、関数変数の参照として、関数が戻った時にアクティブになります.
2、一つのクローズドは、一つの関数が戻った時に、リソースを解放していないスタックエリアです.
3、クローズドは内部変数が直接暴露されないように保証できます.外部で使用されます.
したがって、クローズドの役割は、関数aが実行され、戻ってきた後、GCはaが占めている資源を回収しないようにします.この説明は厳密ではないですが、非常にはっきりしています.
クローズドをよりよく説明するために、関数の実行環境、アクティブオブジェクト、スコープ、スコープチェーンの4つの概念を導入します.
aを定義すると、解凍器はaのscope chainをaを定義する環境に設定します.aは大域関数ですので、aのscope chainはwindowオブジェクトだけです.aを実行すると、aは対応するexcution contextに入ります.実行環境を作成する過程で、aにscope属性を追加します.つまり、aの役割領域はa定義時のOpe windownであります.オブジェクトを作成します.その後、excuation contextはcall objectを作成します.オブジェクトも属性を持つオブジェクトです.しかし、プロトタイプがなくても、jsを通じて直接アクセスできません.その後、そのオブジェクトをaのscope chainの一番上に追加します.この時、aのscope chainは2つのオブジェクトを備えています.その後、cal ojojojectにargments属性を追加して、呼び出し関数aを保存します.伝達されるパラメータ.最後に、すべての関数aのイメージパラメータと内部パラメータもaのアクティブオブジェクトに追加されます.
この関数は、作成時のコンテキスト環境にアクセスできます.これをクローズドと呼びます.
コールバックバック
関数をパラメータとして関数に渡すと、応答が受信されると呼び出しられます.
モジュール
モジュールは関数とクローズドで構成できます.モジュールは、インターフェースを提供しているが、実装されている関数やオブジェクトを隠しています.
カスケードCascade
方法はundefinedではなく、thisを返します.
関数が呼び出されると、argments配列のパラメータが得られます.関数によって、関数定義時に定義されていない余分なパラメータを含むすべてのパラメータリストにアクセスできます.
このargmentsは本物の配列ではなく、lengthの属性だけがあり、indexを通して遍歴することができます.
リターン
return文は戻りに使います.
戻り値が指定されていない場合は、undefinedを返します.
関数がnewで呼び出され、戻り値がオブジェクトでない場合、thisを返します.
異常Exception
var add = function (a, b)
{
if(typeof a != 'number' || typeof b != 'number')
{
throw {name: 'TypeError', message: 'add needs members'};
}
}
var try_it = function ()
{
try {
add("sevem", "ee");
}
catch(e)
{
alert(e.name);
}
}();
タイプへの追加方法Function.prototype.method = function (name, func)
{ if(!this.prototype[name])
{
this.prototype[name]=func;
return this;
}
};
Number.method('ins', function(){
return 2;
});
(3).ins();// value is 2.
スコープscopejsは関数の作用領域があるので、関数内に定義されるパラメータと変数は関数の外部では見られない.また、関数内の任意の位置で定義された変数は、この関数のどこにでも見られます.
jsでは、できるだけ遅くまで変数を説明しなくても、一番いい方法は関数の上部宣言関数で使用できるすべての変数です.
jsは二つの環境しかありません.一つはグローバル環境、一つは関数環境です.つまり、関数以外の場合、大かっこはドメインとして機能しません.外部環境では、大かっこ内の変数にアクセスできます.
関数内のthisは、関数の呼び出し方式に対してそれぞれ異なる意味を持つ.方法に対してモードを呼び出し、すなわち関数がオブジェクトである方法については、thisはオブジェクト自体を表します.関数コールモードでは、thisはすべてのオブジェクト、すなわちwindowです.コンストラクタ呼び出しモードに対して、thisはプロトタイプのオブジェクトです.Apple/call呼び出しに対して、thisは最初のパラメータで指定できます.
クローズド
作用領域の利点は内部の関数がそれらの外部関数を定義するパラメータと変数にアクセスできることである.
1、関数変数の参照として、関数が戻った時にアクティブになります.
2、一つのクローズドは、一つの関数が戻った時に、リソースを解放していないスタックエリアです.
3、クローズドは内部変数が直接暴露されないように保証できます.外部で使用されます.
function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();
上記のコードに示すように、cの変数は実際に関数bを指しています.bに変数iが使われています.関数aの内部の関数が関数の外部の変数によって参照されると、クローズドが作成されます.したがって、クローズドの役割は、関数aが実行され、戻ってきた後、GCはaが占めている資源を回収しないようにします.この説明は厳密ではないですが、非常にはっきりしています.
クローズドをよりよく説明するために、関数の実行環境、アクティブオブジェクト、スコープ、スコープチェーンの4つの概念を導入します.
aを定義すると、解凍器はaのscope chainをaを定義する環境に設定します.aは大域関数ですので、aのscope chainはwindowオブジェクトだけです.aを実行すると、aは対応するexcution contextに入ります.実行環境を作成する過程で、aにscope属性を追加します.つまり、aの役割領域はa定義時のOpe windownであります.オブジェクトを作成します.その後、excuation contextはcall objectを作成します.オブジェクトも属性を持つオブジェクトです.しかし、プロトタイプがなくても、jsを通じて直接アクセスできません.その後、そのオブジェクトをaのscope chainの一番上に追加します.この時、aのscope chainは2つのオブジェクトを備えています.その後、cal ojojojectにargments属性を追加して、呼び出し関数aを保存します.伝達されるパラメータ.最後に、すべての関数aのイメージパラメータと内部パラメータもaのアクティブオブジェクトに追加されます.
この関数は、作成時のコンテキスト環境にアクセスできます.これをクローズドと呼びます.
コールバックバック
関数をパラメータとして関数に渡すと、応答が受信されると呼び出しられます.
モジュール
モジュールは関数とクローズドで構成できます.モジュールは、インターフェースを提供しているが、実装されている関数やオブジェクトを隠しています.
カスケードCascade
方法はundefinedではなく、thisを返します.