ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 高度なプログラミング読書ノート 8 関数クラスとクロージャ_JavaScript スキル

JavaScript 高度なプログラミング読書ノート 8 関数クラスとクロージャ_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 17:55:51912ブラウズ

Function クラス

Definition
Function クラスは、開発者が定義した任意の関数を表すことができます。 Function クラスを使用して関数を直接作成する構文は次のとおりです:

var function_name=new。 Function(agrument1,agrument2,. ..,argumentN,function_body);
各引数はパラメータであり、最後のパラメータは関数本体 (実行されるコード) です。

例:

コードをコピー コードは次のとおりです:

関数SayHi(sName ,sMessage){
alert("Hello " sName "," sMessage);
}

次のように定義することもできます:
var SayHi=new Function("sName" ,"sMessage","alert("Hello" sName "," sMessage);");
注: Function コンストラクターを使用して関数を作成できますが、これは使用しないことをお勧めします。従来の方法よりもはるかに時間がかかり、関数を定義するのが簡単になります。ただし、すべての関数は Function クラスのインスタンスと見なす必要があります。
プロパティとメソッド
関数は参照型であるため、ECMAScript によって定義される属性の長さによって、関数で予期されるパラメーターの数が宣言されます (例:
)。 コードをコピーします コードは次のとおりです。

function doAdd(iNum){
alert(iNum 10); }
function SayHi (){
alert("Hi");
}
alert(doAdd.length);//outpus 1
alert(sayHi.length);//outpus 0

Function オブジェクトには、すべてのオブジェクトと共有される標準の valueOf() メソッドと toString() メソッドもあります。どちらのメソッドも関数のソース コードを返します。これはデバッグ時に特に役立ちます。
例:

コードをコピー コードは次のとおりです。
function doAdd( iNum){
alert(iNum 10);
}
alert(doAdd.toString());

このコードは doAdd() 関数のテキストを出力します。
クロージャ
定義
いわゆるクロージャは、計算する必要のない変数を含む関数の字句表現を指します。つまり、関数は関数の外で定義された変数を使用できます。 ECMAScript でのグローバル変数の使用は、クロージャの簡単な例です。
例:

コードをコピー コードは次のとおりです:
var sMessage=" Hello World" ;
function SayHelloWold(){
alert(sMessage);
}
sayHelloWorld();

別の関数内で関数を定義すると、クロージャが

コードをコピー コードは次のとおりです:
var iBaseNum =10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1 iNum2 iBaseNum;
return
}


この関数 addNumbers() には関数 doAddtion() (クロージャ) が含まれています。内部関数は、外部関数のパラメーター iNum1 および iNum2 とグローバル変数 iBaseNum の値を取得するため、クロージャです。 addNumbers() の最後のステップでは、内部関数を呼び出し、2 つのパラメーターとグローバル変数を加算し、それらの合計を返します。ここで理解すべき重要な概念は、 doAddtion() 関数はパラメーターをまったく受け入れず、実行環境から取得したパラメーターを使用するということです。
ご覧のとおり、クロージャは ECMAScript の非常に強力で多用途な部分であり、複雑な計算を実行するために使用できます。他の高度な関数と同様に、クロージャは非常に複雑になる可能性があるため、使用するときは注意してください。
この記事のサンプルコード


コードをコピー コードは次のとおりです。





《JavaScript高级程序设计》读书笔记之八:関数类及闭包



長さ:



valueOf()/toString():




闭包:





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。