訊息稱英偉達要求廠商暫停 RTX 3090 Ti 顯示卡生產
阿新 • • 發佈:2022-01-15
當函式在被使用時就不刪除(回收)
內層的資料被使用,外層的資料也不刪
function fn(){
let n = 1
return function(){
let m = 1
return function () {
console.log('n:' + ++n)
console.log('m:' + ++m)
}
}
}
let a = fn()();
a() //n:2 m:2
a() //n:3 m:3
建構函式
function FN(){ let n = 1 this.sum (){ console.log('n:' + ++n) } } 相當於: function FN(){ let n = 1 function sum (){ console.log('n:' + ++n) } return { sum: sum } } let a = new FN() //sum被使用,不刪 a.sum() //n:2 a.sum() //n:3 a.sum() //n:4 let b = new FN() //新記憶體空間 b.sum() //n:2 b.sum() //n:3
for--非同步與作用域
// 輸出十個 10
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 輸出 0123456789
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
- 非同步
1 JS是單執行緒環境.
2 對於同步和非同步, 先執行同步程式碼, 碰到非同步的程式碼會將其插入到任務隊列當中等待, 直到同步程式碼執行完畢,才執行非同步程式碼
3 setTimeout是延時,比如上面這段程式碼中,第二個引數延時時間是0,也就是說執行到它的時候會在0ms之後將它插入到任務隊列當中。(此時setTimeout裡的回撥沒有執行)
4 同步程式碼都執行完成之後,那麼JS引擎就空閒了,這個時候就輪到任務佇列中的非同步程式碼依次載入了。
- 作用域
立即執行函式?, 其實是賦值與呼叫
for(var i=1;i<10;i++){ (function(a){ setTimeout(function(){console.log(a);},10000); })(i) } //十秒之後,立刻輸出1 2 3 4 5 6 7 8 9(中間無間隔) //與立即執行函式無關,其實是將i的值儲存到函式內的區域性變數裡了 for(var i=1;i<10;i++){ function fn(a){ setTimeout(function(){console.log(a);},10000); } fn(i) }