JavaScript 関数呼び出し
関数が呼び出されたときに関数本体のコードが実行されます。
JavaScript 関数には 4 つの呼び出しメソッドがあります:
通常の関数呼び出し
メソッド呼び出し
コンストラクター呼び出し
call() と apply() による間接呼び出し
1. 通常の関数呼び出し
最もよく使用される関数呼び出しメソッド (例:
alert("hello");
var result = add(1, 2);
2. メソッド呼び出し
//関数を定義します
function hello(name) {
alert('hello,' + name);
};
var user = {};
//ユーザーsayHi属性に割り当てられます
user.sayHi = hello;
//メソッド呼び出し
user.sayHi('Zhang San');
通常の関数呼び出しとメソッド呼び出し 1 つの違い: 「通常の関数呼び出し」メソッドの場合、関数の呼び出しコンテキスト (this の値) はグローバル オブジェクト (非厳密モード) または未定義 (厳密モード) です。 「メソッド呼び出し」メソッドでは、これは現在のオブジェクトを指します。この機能を利用すると、メソッドが明確な戻り値を必要としない場合に直接返すことができ、「メソッドチェーン」を実現します。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> function myFunction(a, b) { return a * b; } document.getElementById("demo").innerHTML = myFunction(10, 2); </script> </body> </html>
ネストされた関数の This: ネストされた関数では、内部関数は外部関数から this を継承しません。つまり、内部関数がメソッドとして呼び出されるとき、内部関数の this は現在の呼び出しオブジェクトを指します。内部関数の場合 関数が関数として呼び出された場合、this の値はグローバル オブジェクト (非厳密モード) または未定義 (厳密モード) になります。内部関数で外部関数の this にアクセスするにはどうすればよいですか?これは通常、ローカル変数に保存され、変数を通じてアクセスされます:
var obj = {
f : function() {
var self = this;
console.log(this == = obj);//true、これは現在のオブジェクトを指します
f1() ) ;//false、これはグローバルオブジェクトまたは未定義です
console.log(self === obj) ;///true、self は外側の this、つまり現在のオブジェクトを指します
これはグローバルオブジェクトまたは未定義です
console.log(self === obj);
};3. コンストラクターの呼び出し
new キーワードを使用してオブジェクトが作成されると、コンストラクターが呼び出されます。コンストラクターに仮パラメーターがない場合は、括弧を省略できます:
var obj = new Object();//
var obj = new Object;
と同等
コンストラクターを呼び出して新しいオブジェクトを作成します。この新しいオブジェクトはコンストラクターの呼び出しコンテキスト (this の値) になります:
function User(name) {
this.name=name;
Console.debug(this);
}
var user = new User('张三');
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } var x = new myFunction("John","Doe") document.getElementById("demo").innerHTML = x.firstName; </script> </body> </html>
4. call() と apply() による間接呼び出し
Javascript の関数もオブジェクトであり、メソッドを持ちます。このうち、call() と apply() は関数を間接的に呼び出すために使用できます。 call() の最初のパラメータは呼び出しコンテキスト (つまり this の値) を指定するために使用され、後続のパラメータは呼び出し関数に渡される実際のパラメータです。
var name = 'A';
alert (this.name);
}
showName();//A、これはグローバルオブジェクトです
showName .call(user);//B、これはユーザー オブジェクトです