プログラマーP800-ISPオンラインプログラマーユーザーガイド

ここに写真の説明を挿入

ファイル:n459.com/file/25127180-478862695

以下は関係ありません。

- - - - - - - - - - - - - - - - - - - - - -境界線 - - - ----------------------------------------

プログラムが関数を呼び出すと、次のことが行われます。実行環境、初期関数スコープチェーン、および引数パラメーターオブジェクトを準備します。

関数の概要
関数宣言ステートメント
functionコマンドで宣言されたコードブロックは関数です。関数コマンドの後に関数名が続き、関数名の後に括弧のペアが続きます。これは、関数に渡されるパラメーターです。ファンクションボディは中括弧内に配置されています。

function hello(a){ console.log(a); } //呼び出し:hello( 'hello world');関数式は変数割り当てを採用します書き込み方法:匿名関数を変数に割り当てます。このとき、この匿名関数は関数式とも呼ばれます。





var hello = function(a){ console.log(a); } //名前付き関数を変数に割り当てます。var hello = function fn(a){ console.log(a); console.log(fn); // fn(); console.log(fn === hello); // true; } console.log(fn ); // ReferenceError:fnは定義されていません; //名前付き関数fnとhelloは同じ関数ですが、アクションの範囲に一貫性がないことに注意してください。fnは、関数のローカル変数と同等の関数本体でのみ使用できます。内部および外部呼び出し。関数コンストラクターvaradd = new Function('x'、'y'、'return x + y' ); //関数と同等add(x、y){ return x + y; } //任意の数を渡すことができますパラメータは関数コンストラクタに与えられます。最後のパラメータのみが関数本体と見なされます。パラメータが1つしかない場合、そのパラメータは関数本体です。//関数コンストラクターは新しいコマンドを使用する必要はなく、返される結果はまったく同じです。関数returnの戻り値























returnは、関数本体にのみ表示できます。
関数内に複数のreturnステートメントが存在する可能性があります。
return;(式の値は未定義)は、関数が直接実行されることを意味します。returnの後、finally {}のコードを除いて、再度実行されることはありません。
Returnは、任意のデータタイプのデータを返すことができます。
新しいプレフィックスが関数呼び出しの前に追加され、戻り値がオブジェクトではないか、戻り値がない場合は、これ(新しいオブジェクト)を返します

関数呼び出し
関数呼び出しモード

function add(x、y){ return x + y; } var sum = add(3,4); console.log(sum)// 7 //関数呼び出しモードを使用して関数を呼び出す場合、非厳密モードでは、これは次のようになります。グローバルオブジェクトにバインドします; strictモード(strict;を使用)では、これは未定義のメソッド呼び出しモードです





関数がオブジェクトの属性に格納されている場合、それをメソッドと呼びます。メソッドが呼び出されると、これはオブジェクトにバインドされます。呼び出し式に属性を抽出するアクションが含まれている場合、それはメソッドとして呼び出されます。

var p = { a:1、fn:function(){ this.a = 2; } } console.log(pa); // 1 p.fn(); console.log(pa); // 2構築通話モード








関数またはメソッドの呼び出しの前にキーワードnewが付いている場合、それはコンストラクター呼び出しを構成します。
コンストラクター呼び出しに括弧内の引数リストのセットが含まれている場合、これらの引数式は最初に計算されてから関数に渡されます。
コンストラクターに正式なパラメーターがない場合、javascriptコンストラクター呼び出しの構文では、引数リストと括弧を省略できます。正式なパラメータを指定せずにコンストラクタを呼び出す場合は、括弧を省略できます。(Var o = new Object()はvar o = new Objectと同等です)

間接通話モード

javascriptの関数もオブジェクトであり、関数オブジェクトにはメソッドを含めることもできます。call()メソッドとapply()メソッドを使用して、関数を間接的に呼び出すことができます。
これらのメソッドはどちらも、呼び出しに必要なこの値を明示的に指定できますつまり、この関数であっても、任意の関数を任意のオブジェクトのメソッドとして呼び出すことができます。そのオブジェクトのメソッドではありません。どちらのメソッドも、呼び出しの実際のパラメーターを指定できます。call()メソッドは、関数の実際のパラメーターとして独自の引数リストを使用し、apply()メソッドは、配列の形式の入力パラメーターを必要とします。

var obj = {};
function sum(x、y){ return x + y; } console.log(sum.call(obj、1,2)); // 3 console.log(sum.apply(obj、[ 1,2])); // 3関数パラメーターJSは、型が弱い言語です。関数の定義時に関数パラメーターのタイプは指定されておらず、関数呼び出しは、着信する実際のパラメーター値に対してタイプチェックを行いません。実際、javascript関数呼び出しは、渡されたパラメーターの数さえチェックしません。





パラメータの数
1.実際のパラメータ(関数が呼び出されたときに組み込まれる実際のパラメータ値)が、関数宣言(関数が定義されているときのパラメータリスト)で指定されている正式なパラメータの数よりも少ない場合、残りの正式なパラメータは未定義に設定されます値。

function add(x、y){ return x + y; // x:1、y:undefined } add(1); 2.正式なパラメーターよりも実際のパラメーターが多い場合、残りの実際のパラメーターを直接取得することはできません。 、取得するにはargumentsオブジェクトを使用する必要があります。



function add(x、y){ console.log(arguments); console.log(arguments.length); return x + y; } add(1,2,3,4,5); //コンソール:// Arguments(5)[1、2、3、4、5、callee:ƒ、Symbol(Symbol.iterator):ƒ] //引数は配列に似ており、長さなど、配列の一部の属性はインデックスで取得できます。パラメータのリスト。3.関数を定義するときに、正式なパラメーターを省略して、arguments [index]から実際のパラメーターを直接取得することもできます。








同じ名前の正式なパラメーター
非厳密モードでは、同じ名前の正式なパラメーターを関数に表示でき、その名前の最後のパラメーターにのみアクセスできます。

function add(x、x、x){ return x; } console.log(add(1,2,3)); // 3 //厳密モードのコンパイルエラー。関数のオーバーロードJava言語では、関数のオーバーロードは次のように定義されます。メソッド名は同じであり、パラメーターの数またはタイプは異なっている必要があります。JavaScript関数は、Javaのようにオーバーロードすることはできません。関数に渡されたパラメーターのタイプと数をチェックし、異なる反応をすることによってのみ、メソッドのオーバーロードを模倣できます。






function doAdd(){ if(arguments.length == 1){ alert(arguments [0] + 10); } else if(arguments.length == 2){ alert(arguments [0] + arguments [1]); } }パラメータ転送値転送:基本的なデータタイプのパラメータ転送用。文字列、数値、ブール値など。基本型の値をパラメーターに渡すと、渡された値はローカル変数(名前付きパラメーターまたはargumentsオブジェクトの要素)にコピーされます。







function addTen(num){ num + = 10; return num; } var count = 20; var result = addTen(count); console.log(count); // 20、変更なしconsole.log(result); // 30参照渡し:パラメータが参照タイプデータ(オブジェクト、配列)の場合、参照データのメモリアドレスが渡されます。このアドレスはローカル変数にコピーされるため、このローカル変数を変更すると、メモリアドレスを指す参照データが直接変更されます。







function setName(obj){ // objは関数内のローカル変数obj.name = 'test'; } var person = new Object(); setName(person); console.log(person.name); // ' Test '関数の属性とメソッド関数はjavascriptの特別なオブジェクトであり、通常のオブジェクトに属性とメソッドがあるのと同じように、属性とメソッドを持つことができます。Function()コンストラクターを使用して、新しい関数オブジェクトを作成することもできます。







属性
length属性:argumentsオブジェクトのlength属性は実際のパラメーターの数を表し、パラメーターのlength属性は正式なパラメーターの数を表します。

プロトタイププロパティ:すべての関数には、プロトタイプオブジェクトと呼ばれるオブジェクトへの参照を指すプロトタイププロパティがあります。各関数には、異なるプロトタイプオブジェクトが含まれています。関数がコンストラクターとして使用される場合、新しく作成されたオブジェクトは、プロトタイプオブジェクトからプロパティを継承します。

function fn(){};
var obj = new fn;
fn.prototype.a = 1;
console.log(obj.a); // 1
名前属性:関数は、この属性を介して非標準の名前属性を定義します特定の関数の指定された名前にアクセスするために、この属性の値は常にfunctionキーワードに続く識別子と等しく、匿名関数のname属性は空です。

メソッド
各関数には、apply()メソッドとcall()メソッドの2つの非継承メソッドが含まれています。これら2つのメソッドの目的は、特定のスコープで関数を呼び出すことです。

call()&apply()オブジェクトoのメソッドで関数f()を呼び出すには、call()とapply()を使用できます。

f.call(o);
f.apply(o);
//例:
window.color = "red";
var o = {color: "blue"};
function sayColor(){ console.log(this.color) ; } sayColor(); // red sayColor.call(this); // red sayColor.call(window); // red sayColor.call(o); // blue sayColor.call(o)は次と同等です:o .sayColor = sayColor; o.sayColor(); // blue delete o.sayColor; //呼び出し方法:func.apply(scope object、[]); func.call(scope object、a、b、c) ; //非厳密モードで、関数のcall()またはapply()メソッドを使用すると、nullまたは未定義の値がグローバルオブジェクトに変換されます。厳密モードでは、関数のこの値は常に指定された値です。アプリケーション:














配列内で最大の要素を見つけます。

var a = [
10、2、4、15、9 ]; Math.max.apply(null、a); // 15
クラス配列を実際の配列に変換します。

Add function = var(X、Y){ console.log(Array.prototype.slice.apply(arguments)); }; Add(1,2); console:(2)[1、2]配列値を別の配列にプッシュします。





var a = [];
Array.prototype.push.apply(a、[1,2,3]);
console.log(a); // [1,2,3]
Array.prototype.push.apply(a、[2,3,4]);
console.log(a); // [1,2,3,2,3,4]
bind()

bind()はes5の新しいメソッドです。このメソッドの主な関数は、関数をオブジェクトにバインドすることです。
関数f()でbind()メソッドが呼び出され、オブジェクトoがパラメーターとして渡されると、このメソッドは新しい関数を返します。関数呼び出しを介して新しい関数を呼び出すと、oのメソッドとして元の関数f()が呼び出され、新しい関数に渡された実際のパラメーターはすべて元の関数に渡されます。
bind()メソッドは、関数をオブジェクトにバインドするだけでなく、他のいくつかのアプリケーションも付属しています。最初の引数に加えて、bind()で渡される引数もこれにバインドされます。この追加のアプリケーションは「カレー」(カレー)と呼ばれることもある、一般的な機能プログラミング手法。

function getConfig(colors、size、otherOptions){ console.log(colors、size、otherOptions); } var defaultConfig = getConfig.bind(null、 '#c00'、 '1024 768'); defaultConfig( '123'); // '#c00 1024 768 123' defaultConfig( '456'); // '#c00 1024 * 768 456'




おすすめ

転載: blog.csdn.net/gumenghua_com1/article/details/112537316