ホームページ  >  記事  >  ウェブフロントエンド  >  インタビューの質問: JavaScript の呼び出しメソッド

インタビューの質問: JavaScript の呼び出しメソッド

yulia
yuliaオリジナル
2018-09-08 17:06:151193ブラウズ

タイトル:

function fn(a,b){
    console.log(this);
    console.log(a);
    console.log(a+b);
}
fn.call(1);
fn.call.call(fn);
fn.call.call.call(fn,1,2);
fn.call.call.call.call(fn,1,2,3);

答え:
fn.call(1); // 1,unknown,NaN
fn.call.call(fn); fn,1,2); // 1,2,NaN
fn.call.call.call.call(fn,1,2,3); // 1,2,5

; :
fn .call(1); call の最初のパラメーターは、呼び出しの前に関数内のキーワード this を変更するため、その後にパラメーターがないため、a と b は未定義となり、加算結果は NaN になります。
fn.call.call(fn) ;この部分は難しいですが、理解するのは簡単です。 fn.call は Function.prototype で call メソッドを見つけます (これも関数であり、関数クラスのインスタンスです。引き続き call/apply やその他のメソッドを呼び出すこともできます)。fn.call を関数 A とみなすことができます。次に、次のステップは Equal to A.call(fn) です。ここで call メソッドを実行し、A のキーワード this を関数 fn に変更して、関数 A (fn.call) を実行します。 fn, 1,2); 前回の記事のプロトタイプチェーンメソッドにより、fn.call.call.call を A(fn.call.call).call の実行とみなすことができます。このとき、括弧内のパラメータ fn が実行されます。が関数として実行されたので、 A.call(1,2) の実行になります。 1 は、呼び出し前に関数内でこれを変更する最初のパラメータとして使用され、次のパラメータは実パラメータとして関数の仮パラメータに渡されます。
fn.call.call.call.call(fn,1,2,3); 前の原則と同じです。

一般的な概要:
よく理解していない場合は、次の一般的なヒントも覚えておいてください:
2 つ以上の呼び出しが発生した場合、最初のパラメーターが実行され、最初のパラメーターは関数である必要があります。 2 つのパラメーターは、最初のパラメーターでこれを変更するためのものです。
3 番目以降のパラメーターは、実際のパラメーターとして最初のパラメーターに渡されます。

以上がインタビューの質問: JavaScript の呼び出しメソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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