関数は、イベントによって駆動されるか、呼び出されたときに実行されるコードの再利用可能なブロックです。
JScriptは2つの関数をサポートしています。1つは言語内の関数(eval()など)、もう1つはそれ自体で作成されます。
JavaScript関数(VARを使用)内で宣言された変数はローカル変数であるため、関数内でのみアクセスできます。 (この変数の範囲はローカルです)。
変数を宣言した関数のみが認識できるため、異なる関数で同じ名前のローカル変数を使用できます。
関数を呼び出す方法
1。通常の呼び出し:functionName(実際のパラメーター...)
2。関数を指す変数を介して呼び出します。
var myvar = function name;
myvar(実際のパラメーター...);
関数を返します
1.関数に明示的な返品値がない場合、返された値は「未定義」です。
2。関数に戻り値がある場合、返品値が何であれ返します。
returnステートメントを使用して、関数を呼び出される場所に返すことができます。
returnステートメントを使用すると、関数は実行を停止し、指定された値を返します。
通常、関数は一意の値を返しますので、この値は別の関数でもあります。
コードコピーは次のとおりです。
<script type = "text/javascript">
var box = function(){
var a = 1;
return function(){
アラート(A ++)
}
}
alert(box()); // "function(){alert(a ++)}"がポップアップします
</script>
ここでは、戻り値を変数に割り当てるだけで、通常の関数を使用してそれを呼び出すことができます。
コードコピーは次のとおりです。
<script type = "text/javascript">
var box = function(){
var a = 1;
return function(){
アラート(++ a)
}
}
var newfunc = box();
newfunc(); // 2
</script>
返された関数をすぐに実行する場合は、box()()を使用してこのコードを実行することもできます。
すべてのECMAScript関数は値によって渡されます。つまり、パラメーターは参照によって渡されません。
PS:パスごとに参照がある場合、関数の変数はグローバル変数になり、外部からアクセスすることもできます。
(1)値タイプ:数値、ブール、ヌル、未定義。
(2)参照タイプ:オブジェクト、配列、関数。
参照型値:ヒープメモリに保存されているオブジェクトを指します。つまり、変数は実際にはメモリ内の別の場所を実行するポインターであり、オブジェクトはその場所によって保存されます。
匿名関数を作成します
コードコピーは次のとおりです。
関数(){
'lee'を返します。 //単一の匿名関数を実行できず、たとえそれらを実行できたとしても、名前がないために呼び出すことはできません
}
jqueryには、この匿名関数の多くの使用法があります。匿名関数を直接宣言し、すぐに使用します。匿名関数を使用する利点は、一度使用されていない関数の定義を避けることができ、競合の命名の問題がないことです。 JSには名前空間の概念はないため、機能名が競合するのは簡単です。命名紛争が行われると、最後に宣言されたものが勝ちます。
自己解決によって匿名関数を実行します:
コードコピーは次のとおりです。
//自己解明を通じて匿名関数を実行します
<script type = "text/javascript">
(function(){//(匿名関数)();最初の括弧で匿名関数を配置し、2番目の括弧で実行します。
アラート( 'lee');
})();
</script>
匿名関数の返品値を変数に割り当てます。
コードコピーは次のとおりです。
//自己実行された匿名関数の返品値を変数に割り当てる
<script type = "text/javascript">
var box =(function(){
アラート( 'lee');
})(); // popt "Lee";
アラート(ボックス); //未定義のポップアップ。 alert(box())が書かれている場合、「リー」のみがポップアップします
</script>
自己解明のパラメーターを渡す匿名関数:
コードコピーは次のとおりです。
//匿名関数のパラメーター転送を自己拡張します
<script type = "text/javascript">
(function(age){
アラート(年齢);
})(100); // popt 100
</script>
JavaScriptは動的関数を作成します:
JavaScriptは、動的関数の作成をサポートしています。動的関数は関数オブジェクトによって定義する必要があります(関数はJavaScriptのオブジェクトであり、固定されていて変更されていません。関数オブジェクトの「f」を大文字にする必要があることを規定しています。関数を定義するときに使用されるキーワードであることがわかります。
動的関数を作成するための基本形式:var変数名= new関数( "パラメーター1"、 "パラメーター2"、 "パラメーターn"、 "実行ステートメント");
次のコードを見てください。
コードコピーは次のとおりです。
<script type = "text/javascript">
var square = new function( "x"、 "y"、 "var sum; sum = x+y; return sum;");
アラートの結果( "正方形(2,3)は次のとおりです。 //正方形(2,3)の結果は次のとおりです
</script>
正方形は動的に作成された関数です。関数オブジェクトの後にブラケット内のコンテンツの各部分は、文字列の形である必要があります。つまり、引用符( ""または '')に囲まれている必要があります。
このコード:
var square = new function( "x"、 "y"、 "var sum; sum = x+y; return sum;");
と次のコード:
コードコピーは次のとおりです。
関数四角(x、y){
var Sum;
sum = x+y;
返品額;
}
一方が動的関数であり、もう1つは静的関数であることを除いて、まったく同じです。
なぜコードを小さなコードに分割するのですか? 、文字列をいくつかの独立した文字列に分割する利点は、いくつかの文字列を変更することにより、いつでも関数の関数を変更できることです。
コールバック関数
コールバックは、関数の呼び出しプロセスです。次に、この呼び出しプロセスを理解することから始めます。関数Aにはパラメーターがあり、これは関数bです。関数Aが実行されると、関数Bが実行されます。このプロセスはコールバックと呼ばれます。
実際、中国語も理解しやすいです。コールバック、コールバック、バックコールを意味します。関数Aを終了した後、後で関数Bを呼び出します。
ここでは明確でなければなりません。関数Bはパラメーターの形で機能するように渡されるため、関数Bはコールバック関数と呼ばれます。
jQueryの効果関数のほとんどには、コールバック関数が含まれます。 jQuery効果関数
例えば:
コードコピーは次のとおりです。
<script type = "text/javascript">
$( "div")。show(1000、function(){
//コールバック関数
});
</script>
ここでは、コールバック関数をインスタンスに置き換えることができます。
コードコピーは次のとおりです。
<script type = "text/javascript">
$( "div")。show(1000、function(){
console.log( "HelloWorld")
});
</script>
コールバックは実際には、関数が実行される場合、現在実行されている関数はいわゆるコールバック関数です。それはどうですか?理解しやすい...
メソッドと関数の違い
コードコピーは次のとおりです。
var arr = [1,2,3,4,5]
var a = 12; //変数:無料
arr.a = 5; //属性:オブジェクトに属します
function show()// function:free
{
アラート( 'A');
}
arr.fn = function()//メソッド:オブジェクトに属します
{
アラート( 'b');
}
実際、メソッドは関数ですが、メソッドにはそれが属するオブジェクトがあります。
私たちが知っているように、イベントをクリックするためのバインディング機能
文法:
$(selector).click(function)
パラメーターの説明
機能はオプションです。クリックイベントが発生したときに実行される関数を指定します。
このフォームはjqueryでよく見られます。パラメーターとして機能を使用して、メソッドにイベントハンドラーを追加します。
JSグローバル機能
グローバル関数は、組み込みオブジェクトのプロパティや方法を備えた概念ではありません。グローバル関数は、組み込みのオブジェクトに属していません。
JavaScriptには、一般的に使用される機能を完了するための次の7つのグローバル関数が含まれています。
ESCAPE()、EVAL()、ISFINITE()、ISNAN()、PARSEFLOAT()、
parseint()、unescape()。
関数のいくつかの関数
クラスコンストラクターとして使用します
コードコピーは次のとおりです。
function class(){}
class.prototype = {};
var item = new class();
閉鎖として使用されます
コードコピーは次のとおりです。
(関数(){
//独立したスコープ
})();
コンストラクターと呼ばれます
いわゆるコンストラクターは、この関数を介して新しいオブジェクトを生成することです。
コードコピーは次のとおりです。
<script type = "text/javascript">
function test(){
this.x = 10;
}
var obj = new test();
アラート(obj.x); //ポップ10;
</script>
新しい演算子を使用して、Object()、date()、function()などの定義済みのコンストラクターを組み合わせて、オブジェクトを作成および初期化することができます。オブジェクト指向プログラミングは、カスタムコンストラクターを定義してスクリプトで使用されるカスタムオブジェクトを作成する機能の強力な機能です。定義されたプロパティを持つオブジェクトを作成できるように、カスタムコンストラクターが作成されます。以下は、カスタム関数の例です(このキーワードの使用に注意してください)。
コードコピーは次のとおりです。
function circle(xpoint、ypoint、radius){
this.x = xpoint; //円の中心のx座標。
this.y = ypoint; //円の中心のy座標。
this.r = radius; //円の半径。
}
円のコンストラクターを呼び出すとき、中心点の値と円の半径が与えられます(これらの要素はすべて、一意の円形オブジェクトを完全に定義するために必要です)。最後に、円オブジェクトには3つのプロパティが含まれます。円オブジェクトを説明する方法は次のとおりです。
var acircle = new Circle(5、11、99);
コンストラクター関数を使用する利点は、オブジェクトを作成するときにいくつかのパラメーターを受信できることです。
コードコピーは次のとおりです。
<script type = "text/javascript">
関数テスト(名前){
this.occupation = "coder";
this.name = name;
this.whoareyou = function(){
「I'm」 + this.name + "を返し、私は「 + this.occupation;
}
}
var obj = new test( 'trigkit4'); //同じコンストラクターを使用して異なるオブジェクトを作成します
var obj2 = new Test( 'student');
obj.whoareyou(); // "I'm Trigger4と私はコーナーです」
obj2.whoareyou(); //「私は学生で、私はコーナーです」
</script>
慣習により、コンストラクター関数の最初の文字を大文字にして、一般的な関数と大幅に区別する必要があります。
次の2つの形式の定義関数は同等です。
コードコピーは次のとおりです。
<script type = "text/javascript">
var test = function(){
アラート( "Hello World");
}
alert(typeof(test)); //出力関数
</script>
以下は、初期値が関数エンティティに割り当てられる変数テストです
コードコピーは次のとおりです。
<script type = "text/javascript">
function test(){
アラート( "Hello World");
}
alert(typeof(test)); //出力関数
</script>
次の定義関数形式を見てください。
コードコピーは次のとおりです。
<script type = "text/javascript">
function test(){
アラート( "Hello World");
};
test(); //実際にhelloを出力しますよね?
function test(){
アラート( "hello");
};
test(); //のみ、こんにちはは出力です
</script>
明らかに、最初の機能は機能しませんでしたね。 JavaScriptの解析エンジンは、ラインごとにコードを実行するのではなく、コードごとに実行することを知っています。同じプログラムの分析と実行では、定義式の関数ステートメントが最初に実行されるため、最初に定義されたコードロジックが2番目に上書きされているため、同じ関数は2回のみ実行されます。
値として機能します
関数は構文であるだけでなく、JSの値でもあります。つまり、関数は、オブジェクトの属性または配列の要素に保存され、パラメーターとして別の関数に渡される変数に割り当てることができます。
関数の名前は実際には見えません、それは単なる変数の名前であり、関数オブジェクトを指します
コードコピーは次のとおりです。
<script type = "text/javascript">
関数四角(x、y){
x*yを返します。
}
var s = square; // sと正方形は同じ関数を参照します
正方形(2,3); // 6
S(2,4); // 8
</script>
変数への機能を割り当てることに加えて、関数はオブジェクトの属性に割り当てることもできます。関数がオブジェクトの属性と呼ばれる場合、関数はメソッドと呼ばれます。
コードコピーは次のとおりです。
<script type = "text/javascript">
var obj = {square:function(x、y){//オブジェクトが直接測定されます
x*yを返します。
}};
var ect = obj.square(2,3);
</script>
プロトタイプ属性
各関数には、プロトタイプオブジェクトと呼ばれるオブジェクトへの参照を指すプロトタイプ属性が含まれています。
参照:JavaScript学習ノート(v)プロトタイプおよびプロトタイプチェーン
高度な機能
ここでの高次関数は、高度の高次関数ではありません。いわゆる高次関数は、関数を動作させる関数です。パラメーターとして1つ以上の関数を受信し、新しい関数を返します。