我們首先來看乙個例子:
console.log(a); // undefined
var a = 'a';
console.log(a); // a
為什麼會呈現undefined這種情況呢?**從上往下看,變數a並未宣告,而我們知道undefined的意思是變數已經宣告,但並未賦值,由此來看,變數a是已宣告但未賦值的狀態,這是為什麼呢?因為預編譯,又稱為預處理,它是做些**文字的替換工作,是整個編譯過程的最先做的工作,它會把所有宣告提公升到頂端。
所以,以上**在執行過程中實際上是這樣的:
var a;
console.log(a); // undefined
a = 'a';
console.log(a); // a
注意:變數宣告的提公升僅僅是宣告提公升了,賦值不會被提公升。
再來看乙個例子:
console.log(num);
num=100;
console.log(num);
var num;
console.log(num);
試試看寫出console.log(num);的結果吧。
上述**在執行過程中實際上是這樣的:
var num;
console.log(num); //undefined
num=100;
console.log(num); //100
console.log(num); //100
你寫對了嗎?
來看最後乙個例子:
console.log(num);
num=100;
console.log(num);
你認為這一例子的console.log(num);結果是什麼呢?
由於變數num未宣告也未賦值,所以第乙個console.log(num);的結果是會報錯:
console.log(num); //error。
那第二個console.log(num);呢?我們都知道程式一旦出現錯誤,將不會再繼續執行,所以你做對了嗎?
(此為第一篇部落格,不足之處,多請海涵。❤)
關於滑動視窗的小小小tip
計算機網路 如果提出來乙個結論 視窗大小 傳送視窗大小 接收視窗大小。不知道會多少人覺得這是在幹啥。對於n位元編號的資料幀,曾經討論過,傳送 視窗 接 收視窗 2n時可以區分新舊輪次。這篇記錄了一點點那天晚上挺煎熬的思考,因為找不到合適的論據,也沒有足夠的抽象能力抽出這樣的結論,所以只能猜測,後來想...
關於js的各種變數提公升機制
js中,傳統宣告變數是var function es6中是let const import。今天說一下前四種的異同。let 和 const letconst都是宣告乙個變數,但是const宣告的變數不允許指標重新指向,且const宣告的時候必須賦值,否則會報錯。變數賦值本質上就是乙個指標指向的過程。...
乙個例子,變數提公升和函式提公升就是這麼簡單!
引擎在讀取js 的過程中,分為兩步。第乙個步驟是整個js 的解析讀取,第二個步驟是執行。在js 執行之前,瀏覽器的解析器在遇到 var 變數名 和function 整個函式 提公升到當前作用域的最前面。1.變數提公升只會提公升變數名的宣告,而不會提公升變數的賦值初始化。2.函式提公升的優先順序大於變...