面接の知識を自分で整理する(JS編)(一)
5294 ワード
AMD CMD Common JS
AMDはrequire.jsからのモジュール化の定義です.
CMDはsea.jsからのモジュール化の定義です.
CommunjsはNodejsからのモジュール化の仕様です.
AMDは依存関係の前置きを講じる.すなわちモジュールを定義する前に、依存性を宣言するモジュールを要求する.
CMDは依頼が近いことを主張して、直ちに声明に従って使用すればいいです.
前者は実際にモジュールを非同期的にロードするためのモジュール化定義なので、前者のユーザー体験がいいです.
後者はAMD仕様を緩めています.開発については分かりやすく、必要に応じてロードすることができますので、性能がいいです.
今はwebpackなどのパッケージツールが登場していますので、先端の開発過程でもcomonJSを使い始めました.だから、require.jsとsea.jsはますます少なくなりました.
Nodejsはcommon JSの規範に基づいて開発します.
デフォルトの行動を阻止する
e.prevent Default();window.event.return Value=falseと;
aラベルのジャンプを阻止し、ブラウザのデフォルトの右ボタンを阻止し、Safariの輪ゴム問題を解決するために多く使われています.
泡を止める
e.stopPropagation()window.event.ccell Bbble=trueと;
用途は多くなることができて、父の元素は公共の事件を託して、子の元素は独特な事件の情況を書いて、子の元素の事件の泡が立つ行為をキャンセルします.
React中のイベントはトップレベルの元素documentに託して性能を向上させるものであり、Reactで元に戻す必要があります. (e.native Event.stopPropagation)またはstopImmedia Propagation()【任意の同じイベントを阻止するモニターが呼び出しられます】キャンセルイベント
閉包問題
作者のブログを参照してくださいhttps://blog.csdn.net/u012312705/article/details/81749777
クローズドの主な応用はキャッシュ変数で、カプセル化局部変数はJSのゴミ回収メカニズムによって回収されないようにして、変数汚染を防止します.
原型チェーン
すべての引用タイプには_があります.プロトの暗黙の原型
すべての関数にプロトタイプの明示的なプロトタイプがあります.
prototypeとは、関数の一例示的なオブジェクトです.
_.プロト彼のコンストラクタのプロトタイプというのは、つまりは例示的な対象です.
ある方法や属性を呼び出すと、まず自分のプロトタイプを探します.プロトもう見つけられません.引き続き上に探してください.プロトプロトタイプチェーンの先端にnullが来るまで.
FunctionのコンストラクタはObjectです.
主な考察方式はnewを考察する時に何が発生しましたか?
まず、空いているObjectオブジェクトvar obj={}を作成します.
このオブジェクトの構造関数プロトタイプとその構造関数のプロトタイプを連結します.
obj._uproto_=Class A.prototype;
自分のthisを新しいオブジェクトに渡します.すなわち、新しいオブジェクトでコンストラクタを呼び出して、コンストラクタにthisの針を彼に渡して、実例からの方法と属性を継承します.(この時は彼自身にthisに含まれる属性と方法を伝える時)
非同期(Promiseとasync/await)
Promiseは名前を考えて承諾します.データを手に入れると約束して、データをもらえないとrejectを投げ出して、reolveを捨てます.
Promiseはあなたを地獄に戻すことができます.thenのチェーン呼び出しは毎回Promiseの対象に戻ります.元のメンテナンスが難しいコール機能を解放して、AJAXがデータを得てから処理したり、データベース検索をしたりする時に使います.
thenを使ってreolveを捕獲し、catchでrejectを捕獲する.
後者はES 7の新しい文法で、一つの関数が非同期関数であることを宣言して、彼は後のコードの運行をブロックしません.同時にasyncが実際に戻ったのはPromiseオブジェクトです.async関数の中でreturnで戻ります.一つの値は自動的にrescoveを呼び出します.
awaitはasync関数でしか宣言できません.await声明の関数はPromiseオブジェクトになります.async関数のawaitのすべての動作が終わるまで、状態の変化があります.
注意awaitの一つが間違って投げられたら、後ろのawaitが全部実行されなくなります.この時はtry-catchでawaitを全部包んでエラーを捕まえます.
原生AJAX
4歩5歩歩く
まずXMLHttpRequestオブジェクトを作成します.(let ajax=new XMLtpRequest()
get方法:
open設定要求のタイプ(get)を使用して、要求されたurl(urlはパラメータを持つことができます)は、非同期ですか?
ajax.open('get'、'url')
送信要求(ajax.send)[互換性の問題に注意して、データを送信しないと、ieがエラーを起こすので、ここではnullまたは"を送るのが一般的です.]
待ち受け状態
ajax.set Request Header(「Contint-type」、「aplication/x-wn-form-urlencoded」)(応答対象のタイプで、ここではこのような符号化方式でフォームをカプセル化するという意味です.fileを送る時にmultip/form-dataに換える必要があります.あなたのformもこれを加えてください.formのデフォルト値は前者です.
残りはgetと変わらない.
ドメイン別要求
ソースポリシー:ポート、ドメイン名、プロトコルが同じであれば、データ要求を開始することができます.
一般的なアプローチはjsopです.つまりscriptタグでjsonを包む伝達方式です.ブラウザはScriptタグに対して、対米ラベルのようにリソース制限がないので、サーバーでデータパッケージに自分で設定したコールバック関数を使い、jsの下でscriptタグを動的に追加して、jsonデータを要求して、コールバック関数は実行されます.したがって、コールバック関数でデータを処理します.
jsonpはpost方式が使えないし、失敗したかどうか監査するのが面倒くさいので、タイムアウト鑑定を使うのが一般的です.
次にサーバーエージェントを使ってもいいです.サーバーが今回の要求の操作を完了してくれます.
ドメーンはドメインを越えて、同じドメイン名のサブドメイン、つまり兄弟間の交流しか越えられません.ドキュメント・ドメーンが設置された後、ajaxを利用してそのデータにアクセスできます.広告は特にdoman+iframeまたはCORSでドメインを越えて広告コンテンツを入手するのが好きです.
CORS:simple Requestでは、自分でカスタマイズした要求ヘッダを追加せず、get、post、head方法のみを使用する場合、Content-Typeはaplication/x-wn-urlencoded、multiiprt/form-data、text/plinの3種類のうち、サーバーの応答ヘッダにAcess-Control troltroltroltrol-Allaton-Allaton-Allo-Allo-Atroltroltroltratonを追加してください.
同時に二つの要求が異なるところは、その検証の過程にあります.前者は直接応答を取ってACAOに対する解析を行い、直接データを捨てることを満たしていません.
割り当て値
解構成値は、疑似配列に対して多く適用されていましたが、以前はAray.prototype.slite.call()またはAray.from()で解決されていましたが、今は直接(arg)=>{}でパラメータ配列を受信することができます.もちろん(x,y)=>{}も、転送された配列の最初の2つの変数xyを追加することができます.
同じような解像値は、深いコピーに多く使われています.特にReduxは、storeの不変性を保証しています.storeの変数自体を修正しないので、新しい配列をコピーして、新しい配列に修正して元の配列に戻して、直接に置換します.以前はObject.assign(*)を使っていました.またはconcatの方式で配列のクローンを行いますが、今は直接[…oldAray]=newArayの方式で配列をクローンできます.
深くコピーしたり、浅いコピーをしたりする原生実現もよく聞かれます.次の章で詳しく説明してください.
const/let
老成長談は、主に実現手段を検討させる可能性があります.
letの実現手段とその原理:https://blog.csdn.net/u012312705/article/details/81750557 作者のブログ
constは定数を宣言するのではなく、不変のアドレスポインタを宣言し、彼に名前をつけました.このポインタの指し方は変更できません.
経典の栗は例えばconst a=[];a.push("1")です.aの値が変わるかどうかを見てください.もちろんいいです.でも、a(メモリアドレスがユニークなので、その名前は自然と唯一無二です.)を繰り返します.またはその針を直してa=[]をもう一度来たら、その時に誤報されます.
AMDはrequire.jsからのモジュール化の定義です.
CMDはsea.jsからのモジュール化の定義です.
CommunjsはNodejsからのモジュール化の仕様です.
AMDは依存関係の前置きを講じる.すなわちモジュールを定義する前に、依存性を宣言するモジュールを要求する.
CMDは依頼が近いことを主張して、直ちに声明に従って使用すればいいです.
前者は実際にモジュールを非同期的にロードするためのモジュール化定義なので、前者のユーザー体験がいいです.
後者はAMD仕様を緩めています.開発については分かりやすく、必要に応じてロードすることができますので、性能がいいです.
今はwebpackなどのパッケージツールが登場していますので、先端の開発過程でもcomonJSを使い始めました.だから、require.jsとsea.jsはますます少なくなりました.
Nodejsはcommon JSの規範に基づいて開発します.
デフォルトの行動を阻止する
e.prevent Default();window.event.return Value=falseと;
aラベルのジャンプを阻止し、ブラウザのデフォルトの右ボタンを阻止し、Safariの輪ゴム問題を解決するために多く使われています.
泡を止める
e.stopPropagation()window.event.ccell Bbble=trueと;
用途は多くなることができて、父の元素は公共の事件を託して、子の元素は独特な事件の情況を書いて、子の元素の事件の泡が立つ行為をキャンセルします.
React中のイベントはトップレベルの元素documentに託して性能を向上させるものであり、Reactで元に戻す必要があります. (e.native Event.stopPropagation)またはstopImmedia Propagation()【任意の同じイベントを阻止するモニターが呼び出しられます】キャンセルイベント
閉包問題
作者のブログを参照してくださいhttps://blog.csdn.net/u012312705/article/details/81749777
クローズドの主な応用はキャッシュ変数で、カプセル化局部変数はJSのゴミ回収メカニズムによって回収されないようにして、変数汚染を防止します.
原型チェーン
すべての引用タイプには_があります.プロトの暗黙の原型
すべての関数にプロトタイプの明示的なプロトタイプがあります.
prototypeとは、関数の一例示的なオブジェクトです.
_.プロト彼のコンストラクタのプロトタイプというのは、つまりは例示的な対象です.
ある方法や属性を呼び出すと、まず自分のプロトタイプを探します.プロトもう見つけられません.引き続き上に探してください.プロトプロトタイプチェーンの先端にnullが来るまで.
FunctionのコンストラクタはObjectです.
主な考察方式はnewを考察する時に何が発生しましたか?
まず、空いているObjectオブジェクトvar obj={}を作成します.
このオブジェクトの構造関数プロトタイプとその構造関数のプロトタイプを連結します.
obj._uproto_=Class A.prototype;
自分のthisを新しいオブジェクトに渡します.すなわち、新しいオブジェクトでコンストラクタを呼び出して、コンストラクタにthisの針を彼に渡して、実例からの方法と属性を継承します.(この時は彼自身にthisに含まれる属性と方法を伝える時)
非同期(Promiseとasync/await)
Promiseは名前を考えて承諾します.データを手に入れると約束して、データをもらえないとrejectを投げ出して、reolveを捨てます.
Promiseはあなたを地獄に戻すことができます.thenのチェーン呼び出しは毎回Promiseの対象に戻ります.元のメンテナンスが難しいコール機能を解放して、AJAXがデータを得てから処理したり、データベース検索をしたりする時に使います.
thenを使ってreolveを捕獲し、catchでrejectを捕獲する.
後者はES 7の新しい文法で、一つの関数が非同期関数であることを宣言して、彼は後のコードの運行をブロックしません.同時にasyncが実際に戻ったのはPromiseオブジェクトです.async関数の中でreturnで戻ります.一つの値は自動的にrescoveを呼び出します.
awaitはasync関数でしか宣言できません.await声明の関数はPromiseオブジェクトになります.async関数のawaitのすべての動作が終わるまで、状態の変化があります.
注意awaitの一つが間違って投げられたら、後ろのawaitが全部実行されなくなります.この時はtry-catchでawaitを全部包んでエラーを捕まえます.
原生AJAX
4歩5歩歩く
まずXMLHttpRequestオブジェクトを作成します.(let ajax=new XMLtpRequest()
get方法:
open設定要求のタイプ(get)を使用して、要求されたurl(urlはパラメータを持つことができます)は、非同期ですか?
ajax.open('get'、'url')
送信要求(ajax.send)[互換性の問題に注意して、データを送信しないと、ieがエラーを起こすので、ここではnullまたは"を送るのが一般的です.]
待ち受け状態
ajax.onreadystatechange = ()=>{
if(ajax.readyState == 4 && ajax.status == 200){
// ajax.responseText()
}
}
postメソッドでは、要求ヘッダの設定が必要です.ajax.set Request Header(「Contint-type」、「aplication/x-wn-form-urlencoded」)(応答対象のタイプで、ここではこのような符号化方式でフォームをカプセル化するという意味です.fileを送る時にmultip/form-dataに換える必要があります.あなたのformもこれを加えてください.formのデフォルト値は前者です.
残りはgetと変わらない.
ドメイン別要求
ソースポリシー:ポート、ドメイン名、プロトコルが同じであれば、データ要求を開始することができます.
一般的なアプローチはjsopです.つまりscriptタグでjsonを包む伝達方式です.ブラウザはScriptタグに対して、対米ラベルのようにリソース制限がないので、サーバーでデータパッケージに自分で設定したコールバック関数を使い、jsの下でscriptタグを動的に追加して、jsonデータを要求して、コールバック関数は実行されます.したがって、コールバック関数でデータを処理します.
jsonpはpost方式が使えないし、失敗したかどうか監査するのが面倒くさいので、タイムアウト鑑定を使うのが一般的です.
次にサーバーエージェントを使ってもいいです.サーバーが今回の要求の操作を完了してくれます.
ドメーンはドメインを越えて、同じドメイン名のサブドメイン、つまり兄弟間の交流しか越えられません.ドキュメント・ドメーンが設置された後、ajaxを利用してそのデータにアクセスできます.広告は特にdoman+iframeまたはCORSでドメインを越えて広告コンテンツを入手するのが好きです.
CORS:simple Requestでは、自分でカスタマイズした要求ヘッダを追加せず、get、post、head方法のみを使用する場合、Content-Typeはaplication/x-wn-urlencoded、multiiprt/form-data、text/plinの3種類のうち、サーバーの応答ヘッダにAcess-Control troltroltroltrol-Allaton-Allaton-Allo-Allo-Atroltroltroltratonを追加してください.
app.all('/test', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
simple Requestでない場合、つまり上記を満たさない場合、要求されたサーバーに一回の事前検証を行い、相手サーバが要求の所在地域(Acess-Coontrol-Origin)をサポートしているかどうかを確認し、要求の方式(Acess-Control-Alllow-Matters)をサポートしていますか?【CORSプロトコルは、デフォルトでは、Cache-Contect-Language、Content-Type、Expires、Last-Maodified、Pragmaをサポートします.ここでは、非同期AJAX要求をサポートするためです.】同時に二つの要求が異なるところは、その検証の過程にあります.前者は直接応答を取ってACAOに対する解析を行い、直接データを捨てることを満たしていません.
割り当て値
解構成値は、疑似配列に対して多く適用されていましたが、以前はAray.prototype.slite.call()またはAray.from()で解決されていましたが、今は直接(arg)=>{}でパラメータ配列を受信することができます.もちろん(x,y)=>{}も、転送された配列の最初の2つの変数xyを追加することができます.
同じような解像値は、深いコピーに多く使われています.特にReduxは、storeの不変性を保証しています.storeの変数自体を修正しないので、新しい配列をコピーして、新しい配列に修正して元の配列に戻して、直接に置換します.以前はObject.assign(*)を使っていました.またはconcatの方式で配列のクローンを行いますが、今は直接[…oldAray]=newArayの方式で配列をクローンできます.
深くコピーしたり、浅いコピーをしたりする原生実現もよく聞かれます.次の章で詳しく説明してください.
const/let
老成長談は、主に実現手段を検討させる可能性があります.
letの実現手段とその原理:https://blog.csdn.net/u012312705/article/details/81750557 作者のブログ
constは定数を宣言するのではなく、不変のアドレスポインタを宣言し、彼に名前をつけました.このポインタの指し方は変更できません.
経典の栗は例えばconst a=[];a.push("1")です.aの値が変わるかどうかを見てください.もちろんいいです.でも、a(メモリアドレスがユニークなので、その名前は自然と唯一無二です.)を繰り返します.またはその針を直してa=[]をもう一度来たら、その時に誤報されます.