ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript_javascriptスキルにおける名前付き関数の各種呼び出し方法まとめ

JavaScript_javascriptスキルにおける名前付き関数の各種呼び出し方法まとめ

WBOY
WBOYオリジナル
2016-05-16 16:32:071619ブラウズ

前の記事では、匿名関数を呼び出す複数の方法について説明しました。この記事では、名前付き関数を呼び出すさまざまな方法を説明します。

1, ()

最も一般的に使用されるのは、関数を呼び出し/実行するための () 演算子です。

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

// パラメータのない関数 fun1
関数 fun1() {
alert('電話がかかってきました');
}
fun1();

// パラメータ化された関数 fun2
function fun2(param) {
アラート(パラメータ);
}
fun2('呼ばれました');

ECMAScript3 では Function に call と apply を追加し、以下の 2 種類があります。

2.

に電話します。

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

// パラメータのない関数 fun1
関数 fun1() {
alert('電話がかかってきました');
}
fun1.call(null);

// パラメータ化された関数 fun2
function fun2(param) {
アラート(パラメータ);
}
fun2.call(null,'電話されました')

3. 適用

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

// パラメータのない関数 fun1
関数 fun1() {
alert('電話がかかってきました');
}
fun1.apply(null);

// パラメータ化された関数 fun2
function fun2(param) {
アラート(パラメータ);
}
fun2.apply(null,['呼ばれました'])

call と apply は純粋に関数の呼び出し/実行に使用できますが、関数実行のコンテキストを変更するために使用されます。

4. 新しい (この方法は推奨されません)

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

// パラメータのない関数 fun1
関数 fun1() {
alert('電話がかかってきました');
}
新しい fun1();

// パラメータ化された関数 fun2
function fun2(param) {
アラート(パラメータ);
}
新しい楽しみ2(「呼ばれました」)

new の本質は、クラスのインスタンスを作成/構築することです。ここで定義されている fun1 と fun2 は明らかにクラスではありません (これもプロトタイプもありません)。ただし、両方の関数は実行されました。これは新しい副作用です。

上記のメソッド呼び出しから、4つのメソッドの実行結果に違いはありません。ただし、関数に戻り値がある場合、new で呼び出すと少しがっかりするかもしれません。

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

// 関数 fun
と戻り値 関数 fun() {
alert('電話がかかってきました');
"ジャック" を返します;
}
var c = 新しい楽しみ();
alert(c);//[object オブジェクト]、なぜ「ジャック」ではないのでしょうか?

これに変更してください

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

// 関数 fun
と戻り値 関数 fun() {
alert('電話がかかってきました');
{name:'jack'} を返します;
}
var c = 新しい楽しみ();
alert(c.name); //ジャック、再び正常に返されました

要約すると、新しいメソッドを使用して関数を呼び出すときです。戻り値がある場合、戻り値が String、Number、Boolean などの JavaScript の組み込み型 (基本型) の場合、戻り値がオブジェクトの場合は値は返されません。 function 、 array およびその他のオブジェクト型の場合、 object、function、array が直接返されます。

戻り値が組み込み型(基本型)の場合、new fun()は一体何を返すのでしょうか?次の記事では、新しいメソッド呼び出しの詳細について説明します。

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