1. 程式人生 > 資訊 >訊息稱英偉達要求廠商暫停 RTX 3090 Ti 顯示卡生產

訊息稱英偉達要求廠商暫停 RTX 3090 Ti 顯示卡生產

當函式在被使用時就不刪除(回收)

內層的資料被使用,外層的資料也不刪

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. 非同步

1 JS是單執行緒環境.
2 對於同步和非同步, 先執行同步程式碼, 碰到非同步的程式碼會將其插入到任務隊列當中等待, 直到同步程式碼執行完畢,才執行非同步程式碼
3 setTimeout是延時,比如上面這段程式碼中,第二個引數延時時間是0,也就是說執行到它的時候會在0ms之後將它插入到任務隊列當中。(此時setTimeout裡的回撥沒有執行)


4 同步程式碼都執行完成之後,那麼JS引擎就空閒了,這個時候就輪到任務佇列中的非同步程式碼依次載入了。

  1. 作用域

立即執行函式?, 其實是賦值與呼叫

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)
}