JavaScriptの面接をマスターします.

3924 ワード

その中に身を置くことができますが、JavaScriptの一連のアプリケーションを開発する方法は本当に分かりますか?このアプリはどうやって実行されているのか本当に分かりますか?信じません.この問題が分かりません.面接では危険なサインです.
        クローズドの実現原理を知っているだけでなく、なぜそれが重要なのかを理解し、いくつかのクローズドを使った用例に簡単に答えてください.
        JavaScriptでは、クローズドは、データのプライバシー、イベントの処理、コールバック関数、および関数の偏り、カリー化、および他の関数のプログラミングの例によく使われます.
        面接官は「クローズド」という言葉や定義が分かるかどうかは気にしません.彼は面接者がその原理を知っているかどうかを知りたいです.彼らが理解していないなら、スマートな説明は開発者として、JavaScriptアプリケーションの実際の開発にはプログラミング経験が足りないです.
        この質問に答えられないなら、あなたは初心者の開発者です.あなたがどれぐらいプログラミングしたかは気になりません.たとえ10年でも.
        迅速にフォローアップして答えます.「閉じた二つのよくある使い方を教えてもらえますか?」
閉包とは何ですか
        つまり、クローズドとは、関数と周囲の状態に対する参照を結びつける組み合わせです.JavaScriptでは、関数が作成されるたびに、クローズドが作成され、関数が作成されます.
        これらは基本原理ですが、私たちはなぜそれに関心を持ちますか?実際には、クローズドは括弧で縛られているので、関数の内部から関数の外部領域にアクセスすることができます.
        クローズドを使用するには、関数を他の関数に定義して外部に露出します.関数を暴露するには、それを返したり、他の関数に伝えたりします.
        関数の内部には、関数の外部作用領域の変数にアクセスする権限があります.
クローズドを使う(例)
        前に述べましたが、クローズドは通常対象のデータプライバシーに使用されます.データのプライバシーは重要な属性であり、私たちがインターフェースを作成するのに役立ちます.これは非常に重要な概念であり、私たちがより強力で、よりロバストなソフトウェアを確立するのに役立ちます.詳細はインターフェースプロトコルよりも変更しやすいからです.
        JavaScriptでは、クローズドはデータプライバシーのための主要なメカニズムである.クローズドされたパケットがデータのプライバシーに使用される場合、(外部)関数を含む範囲にのみ含まれます.対象の特権的な方法を通じて、外部ドメインから内部データを取得することはできません.JavaScriptでは、クローズドドメイン内での暴露方法を定義しています.特権があります.たとえば:
/*

interface Obj {

 get() => Any;

}

 

o(secret: Any) => Obj

*/

const o = (secret) => {

 return {

   get: () => secret

 };

};

 

test('Closure for object privacy.',assert => {

 const msg = '.get() should have access to the closure.';

 const expected = 1;

 const obj = o(1);

 

 const actual = obj.get();

 

 try {

   assert.ok(secret, 'This throws an error.');

 } catch (e) {

   assert.ok(true, `The secret var is only available

     to privileged methods.`);

 }

 

 assert.equal(actual, expected, msg);

 assert.end();

});
        上記の例では、「.get()」方法は「o()」ドメインに定義されており、「o()」にアクセスできる変数はいずれも特権的な方法である.例のパラメータは「secret」です.
        オブジェクトだけがデータのプライバシーを生むわけではない.クローズドは、状態の関数を作成するためにも使用でき、内部状態によってその戻り値に影響を与えることができます.たとえば:
// secret(msg: String) =>getSecret() => msg: String

const secret = (msg) => () =>msg;

 

test('secret', assert => {

 const msg = 'secret() should return a function that returns the passedsecret.';

 

 const theSecret = 'Closures are easy.';

 const mySecret = secret(theSecret);

 

 const actual = mySecret();

 const expected = theSecret;

 

 assert.equal(actual, expected, msg);

 assert.end();

});
        関数式プログラミングでは、関数偏向の応用とコリック化にはしばしば閉込めが用いられる.いくつかの定義が必要です.
        アプリケーション:関数をパラメータに適用して、戻り値を生成するプロセスです.
        偏関数の応用:関数をそのパラメータに適用するプロセス.この戻り値は関数として使用されます.言い換えれば、一つの関数は複数のパラメータを受信し、パラメータを有する関数を返します.関数の内部で関数を返す1つまたは複数の入力パラメータを修正し、リターン関数はこれらの修正されたパラメータを自分のパラメータとして使用して関数全体の機能を完成させます.
        バイアス関数アプリケーションは、クローズド領域内でパラメータを修正するのに便利な上に確立されています.汎用関数を書いて、パラメータ部分をターゲット関数に適用します.これは以下の特徴を持つだろう.
partialApply(targetFunction: Function,...fixedArgs: Any[]) =>

 functionWithFewerParams(...remainingArgs: Any[])
        関数は任意の数のパラメータが必要ですが、一部のパラメータを関数に適用し、残りのパラメータを持つ関数を返す必要があります.
        以下の例は、理解に役立つかもしれない.
        二つの値を加算する関数があります.
const add = (a, b) => a + b;
        今は任意の値に10を加えたいです.私たちはこの関数を「add 10()」と名付けました.「add 10(5)」の結果は「15」であるべきです.
        私たちの「partialAppley()」はそれを実現させます.
const add10 = partialApply(add, 10);

add10(5);
        上記の例では、パラメータ「10」は、「add 10()」クローズド領域で使用される修正パラメータである.
        「partialAppley()」の実現を見てみましょう.
const partialApply = (fn, ...fixedArgs)=> {

 return function (...remainingArgs) {

   return fn.apply(this, fixedArgs.concat(remainingArgs));

 };

};
        あなたが見ているように、簡単に「fixedArgs」にアクセスできるパラメータを持つ関数を返します.この関数は「partialAppley()」を通してパラメータfnに入ってきます.
今はあなたの番です
        クローズドはどう使いますか?