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