JavaScript常用知識点のまとめ

13401 ワード

js閉包は何ですか?よく使われる閉じた例
閉包とは何ですかクローズドとは、他の関数の作用領域にアクセスする変数の関数を指します.他の関数の内部変数の関数を読み取り、クローズドすることができます.正常関数が実行された後、中に宣言された変数はゴミ回収で処理されます.関数が実行された後もゴミ回収されずに処理されます.
閉じられたパッケージの例:
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は関数が持つもので、コンストラクタを定義するときに自動的に作成されます.プロトによって常に指摘されています.
    すべての対象にはプロト属性があり、関数という特殊な対象はプロト属性の他に、特有のプロトタイプがあります.prototypeオブジェクトはデフォルトで二つの属性があります.constructor属性とproto属性です.prototype属性は、関数とオブジェクトに共有(継承)可能な方法、属性を追加することができ、protoは、ある関数またはオブジェクトのプロトタイプチェーンを検索する方法である.