標識符
定義變量,函數(shù)付鹿,屬性的時候的標識符澜汤,是區(qū)分大小寫的。
第一個字符必須是字母舵匾,_和$俊抵。
后面的還可以是數(shù)字。
變量提升
js的引擎工作方式是坐梯,先解析代碼徽诲,獲取所有的被聲明的變量,然后再一行一行地運行。所以谎替,所有變量的聲明語句,都會被提升到代碼的頭部钱贯,稱為變量提升。
var a =2;
這個賦值語句秩命,進行解析時,
var a;
a =2;
硫麻,先解析出變量聲明爸邢,a的初始值為undefined,然后才逐句執(zhí)行程序拿愧。
舉例:
var a = 100;
b = 10;
console.log(a);
console.log(c);
var c = 20;
var d = 30;
解析完成后的代碼其實為:
var a;
var c;
var d;
// 變量提升
a = 100;
b = 10;
console.log(a); // 100
console.log(c); //undefined
c = 20;
d = 30;
瀏覽器渲染機制
CSS和JS在網(wǎng)頁中的放置順序是怎樣的?
css樣式一般要使用link標簽放到頂部浇辜。body的前面,即head標簽內(nèi)柳洋。
對于js待诅,一般要將js放在底部,因為腳本會阻塞后面內(nèi)容的呈現(xiàn)以及后面組件的下載熊镣。
css加載的時候是允許并發(fā)加載的卑雁,但是對于js來說绪囱,會禁用并發(fā)并且阻止其他內(nèi)容的下載,所以當把js放到頂部的時候也可能會出現(xiàn)白屏現(xiàn)象鬼吵。白屏問題和FOUC
如果把樣式放在底部,對于IE瀏覽器琉挖,在某些場景下(新窗口打開涣脚,刷星等)頁面會出現(xiàn)白屏示辈,而不是逐步展現(xiàn)內(nèi)容涩澡。
另外坠敷,如果使用@import射富,即使CSS放入link,并且放在頭部胰耗,也可能出現(xiàn)白屏。
FOUC(flash of unstyled content)卖漫,無樣式內(nèi)容閃爍赠群,如果把樣式放在頁面底部,對于IE瀏覽器查描,在某些場景下(點擊鏈接,輸入url冬三,使用書簽進入等),會出現(xiàn)FOUC現(xiàn)象(即逐步加載無樣式的內(nèi)容敌蚜,等到CSS全部加載完成之后頁面突然展現(xiàn)樣式窝爪。)對于firefox會一直表現(xiàn)出FOUC。加載異步酸舍,async和defer
-
<script src="xxx.js"></script>
沒有defer和async里初,瀏覽器會立即加載并且執(zhí)行指定的腳本,即不等待后續(xù)載入的文檔元素双妨,讀到就加載并執(zhí)行。 -
<script async src="xxx.js"></script>
有async泣特,加載和渲染后續(xù)文檔元素的過程將和script.js的加載與執(zhí)行并行進行(即異步)挑随。 -
<script defer src="xxx.js"></script>
有defer,加載后續(xù)文檔元素的過程將和script.js的加載并行進行(異步),但是script.js的執(zhí)行要在所有的元素解析完成之后眯分,將DOMContentLoaded事件觸發(fā)之前完成柒桑。 - defer和async的區(qū)別: defer腳本延遲到文檔解析和顯示之后才執(zhí)行,是由順序的魁淳。而async不保證順序。
4.瀏覽器的渲染機制
- 解析HTML標簽昆稿,構建DOM樹
- 解析CSS標簽息拜,構建CSSOM樹
- 把DOM和CSSOM組合成渲染樹(render tree)
- 把渲染樹的基礎上進行布局,計算每個節(jié)點的幾何結構
- 把每個節(jié)點繪制到屏幕上(painting)
5.基本調(diào)試的方法
- alert
- console.log
- 設置斷點
- 二分法