面試題筆記html
一,重繪和重排前端
頁面出現的過程當中:
1,獲取html文檔,構建DOM樹,也就是頁面的內容結構;
2,獲取style文件,構建style樹,也就是如何展現內容;
3,style樹和DOM樹結合,生成渲染樹以後,才繪製網頁,最終呈現結果。node
重排:當DOM樹發生幾何變化,致使頁面從新計算元素寬高;
重繪:當style樹發生內容改變,致使頁面樣式改變;es6
注意:重排必定重繪,重繪不必定重排。面試
二,爲了達到移動設備的理想viewport,可使用meta標籤對viewport進行控制,meta標籤實現響應式網頁的主要屬性有:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=no">編程
解析:
width – viewport的寬度
height – viewport的高度
initial-scale – 初始的縮放比例
minimum-scale – 容許用戶縮放到的最小比例
maximum-scale – 容許用戶縮放到的最大比例
user-scalable – 用戶是否能夠手動縮放瀏覽器
三,js閉包函數
1,特色:閉包
四,前端事件冒泡和事件捕獲函數
五,es6的經典語法
1,箭頭函數this
六,js中的函數提高和變量提高(注意es6的塊級做用域)
1,變量提高:js先將所有的變量進行聲明,再回到聲明的地方進行賦值,變量的聲明的過程就是變量的提高。//變量聲明是提高的,賦值是順序的。
2,函數提高:直接將整個函數總體提高到做用域的最開始位置,至關於剪切過去的樣子。
函數提高只會提高函數聲明,而不會提高函數表達式:
function foo1 () {
console.log("foo1");
};//提高,而且提高以後爲:var foo1 = function(){...},此時foo1是做爲一個變量。
var foo2 = function () {
console.log("foo2");
};//不提高
3,變量和函數同時發生提高:函數提高優於變量提高。
注意:只有聲明的變量和函數纔會進行提高,隱式全局變量不會提高。「提高」的本質就是爲了事先聲明變量和函數,固然函數只有聲明式函數纔會被提高,字面量函數不會被提高。這種提高就是存在於做用域中,包括全局做用域、函數做用域(閉包造成的做用域也是個函數做用域),總之都是在做用域中聲明變量和函數時,會提高到做用域頂部,進行事先聲明。
JavaScript沒有塊做用域,只有全局做用域和函數做用域。ES6新增了let和const關鍵字,使得js也有了「塊」級做用域,並且使用let和const 聲明的變量和函數是不存在提高現象的,比較有利於咱們養成良好的編程習慣。
es6標準:
1,容許在塊級做用域內聲明函數;
2,函數聲明(函數名稱) 相似於 var,即會提高到全局做用域或函數做用域的頭部;
3,同時,函數聲明(函數總體) 還會提高到所在的塊級做用域的頭部。
ps:
function xxx(){} 這種函數聲明。而不是 var xxx = function(){}這種函數表達式。前者,用本文的邏輯去考慮函數的提高和函數的塊級做用域;後者,等價於變量的提高和變量的塊級做用域。
若是換作嚴格模式下的 node 環境,那麼將嚴格遵照 es6 標準:函數聲明相似於 let。
ps:
聲明全局變量:
1,函數內部沒有聲明,直接給變量賦值的是聲明全局變量,執行函數的時候不進行變量提高;
2,函數內部寫成 var a = b = c = 20; //隱式聲明瞭全局變量b和c,b和c沒有進行變量提高,可是a有;
3,var a =20, b = 30,c = 40; //中間以,分隔開表示同時定義了局部變量a,b,c,都進行變量提高;
4,var a =20; b = 30; c = 40; //中間以;分隔開表示同時定義了一個局部變量a和全局變量b和c,a有變量提高,b和c沒有;
其實4和2是相等的。
七,js基本數據類型
1,JS基本有5種簡單數據類型:String,Number,Boolean,Null,undefined。一種複雜的數據類型Object。
2,ES6基本數據類型:
ES6新增數據類型Symbol: 表示獨一無二的值
typeof Symbol() // 'symbol'
typeof Number() // 'number'
typeof Sring() // 'string'
typeof Function() // 'function'
typeof Objecr() // 'object'
typeof Boolean() // 'boolean'
typeof null() // 'object'
typeof undefined() // 'undefined'。
八,域
九,關於this,當前對象
1, window自動被瀏覽器聲明
// 1.調用對象未聲明的屬性會undifned
var user={};
console.log(user.name);//undifned
// 2.使用未賦值只聲明的基本數據類型會undifned
var one;
console.log(one);//undifned
// 3.使用未聲明的變量會報錯
console.log(two);//new_file.html:15 Uncaught ReferenceError: two is not defined
window對象已經自動被瀏覽器聲明瞭,只是尚未聲明count屬性,因此調用window對象的未聲明屬性也是undifned
2,函數使用嚴格模式‘use strict’:
function foo(){'use strict'
console.log(this.location);
}
foo();//'use strict'是嚴格模式,嚴格模式函數中法this禁止指向全局對象window,這個this是undefined。
3,