JavaScript常用知識点のまとめ
13401 ワード
js閉包は何ですか?よく使われる閉じた例
閉包とは何ですかクローズドとは、他の関数の作用領域にアクセスする変数の関数を指します.他の関数の内部変数の関数を読み取り、クローズドすることができます.正常関数が実行された後、中に宣言された変数はゴミ回収で処理されます.関数が実行された後もゴミ回収されずに処理されます.
閉じられたパッケージの例:
jsメモリの漏れは、どうやって防ぎますか?
https://segmentfault.com/a/1190000020114344グローバル変数
タイマーの使用(ES 5とES 6のサイクルの違いは何ですか?)
どのように正常に印刷させるか(クローズドで正常に印刷させる)方法を変更しますか?
promise非同期要求の実行順序(先にメインスレッド、再非同期キュー)
Jsプロトタイプチェーン
プロトタイプチェーンとは何ですか?各オブジェクトにはプロトタイププロトがあります.このプロトタイプは自分のプロトタイプもあります.これを類推してプロトタイプチェーンを形成します.特定の属性を探す時は、まずこの対象の中に探しに行きます.なかったらその原型の対象の中に探しに行きます.ないのではないなら、原型の対象の原型の対象の中に探しに行きます.この操作は原型のチェーン全体に任せられています.これは私達が言っているプロトタイプのチェーンです._プロトプロトタイプの検索で実際に使われていますが、問題はプロトタイプ を指しています. prototypeは関数が持つもので、コンストラクタを定義するときに自動的に作成されます.プロトによって常に指摘されています.
すべての対象にはプロト属性があり、関数という特殊な対象はプロト属性の他に、特有のプロトタイプがあります.prototypeオブジェクトはデフォルトで二つの属性があります.constructor属性とproto属性です.prototype属性は、関数とオブジェクトに共有(継承)可能な方法、属性を追加することができ、protoは、ある関数またはオブジェクトのプロトタイプチェーンを検索する方法である.
閉包とは何ですかクローズドとは、他の関数の作用領域にアクセスする変数の関数を指します.他の関数の内部変数の関数を読み取り、クローズドすることができます.正常関数が実行された後、中に宣言された変数はゴミ回収で処理されます.関数が実行された後もゴミ回収されずに処理されます.
閉じられたパッケージの例:
function addCount() {
let count = 0
return function() {
++count
console.log(count)
}
}
var foo = addCount()
foo() // 1
foo() // 2
プロセス:addCount()が実行するとき、関数を返します.関数は自分の作用領域を作成できますが、この場合戻ってくる関数の内部はaddCount()作用領域の変数countを参照してください.このcountは破壊されないからです.jsメモリの漏れは、どうやって防ぎますか?
https://segmentfault.com/a/1190000020114344
function func() {
name = 'text' // window.name = 'text'
}
解決方法:厳格なモードを使って、use strict 2.破壊されていないタイマーとコールバック関数setInterval(function() {
var render = document.getElementById('id')
if (render) {
render.innerHTML = 'html'
}
}, 3000)
解決方法:タイマーが仕事を終えた時、携帯はタイマーをクリアします.let obj = function() {
let original = thing
thing = {
longStr: new Array(10000).join(''),
someMethod: function() {
console.log(original)
}
}
}
解決方法:クローズド自体は間違っていません.メモリ漏れを起こさず、エラーによる4.DOM参照です.let ele = {
image: document.getElementById('image')
}
function doStuff() {
ele.image.src= 'https://url/image.jpg'
}
function removeImage() {
ele.body.removeChild(document.getElementById('image'))
}
解決方法:イメージ=nullタイマーの使用(ES 5とES 6のサイクルの違いは何ですか?)
for (var i = 0; i< 4; i++) {
setTimeout(function() {
console.log(i)
}, 300)
} // 4
プロセス:js実行時、まず
、非同期コンポーネント関連のは非同期キューに保存され、メインスレッドの実行が完了したら非同期キューを実行し、メインスレッドの実行が完了したら、iの値は4になりますので、非同期キューキューを実行する時に、打ち殺したのは全部4です.ここでは、event loopについて知っておく必要があります.(jsのイベントサイクル機構)どのように正常に印刷させるか(クローズドで正常に印刷させる)方法を変更しますか?
for (var i =0; i<4;i++) {
setTimeout((function(i) {
return function () {
console.log(i)
}
})(i), 300)
}
// :
for (var i =0;i<4;i++) {
setTimeout((function() {
var temp = i
return function() {
console.log(temp)
}
})(),300)
}
方法2:自己実行関数を作成することにより、この自己実行関数の作用領域に変数を存在させます.for (var i=0;i<4;i++) {
(function(i) {
setTimeout(function() {
console.log(i)
},300)
})(i)
}
クローズドの欠陥:上記の例によって、クローズドはメモリの占有率が高すぎることを招きます.変数がすべてメモリを解放していないためです.promise非同期要求の実行順序(先にメインスレッド、再非同期キュー)
Jsプロトタイプチェーン
プロトタイプチェーンとは何ですか?各オブジェクトにはプロトタイププロトがあります.このプロトタイプは自分のプロトタイプもあります.これを類推してプロトタイプチェーンを形成します.特定の属性を探す時は、まずこの対象の中に探しに行きます.なかったらその原型の対象の中に探しに行きます.ないのではないなら、原型の対象の原型の対象の中に探しに行きます.この操作は原型のチェーン全体に任せられています.これは私達が言っているプロトタイプのチェーンです.
すべての対象にはプロト属性があり、関数という特殊な対象はプロト属性の他に、特有のプロトタイプがあります.prototypeオブジェクトはデフォルトで二つの属性があります.constructor属性とproto属性です.prototype属性は、関数とオブジェクトに共有(継承)可能な方法、属性を追加することができ、protoは、ある関数またはオブジェクトのプロトタイプチェーンを検索する方法である.