1. 說說你對做用域鏈的理解?
做用域鏈的做用是保證執行環境裏
有權訪問的變量和函數是有序的,
做用域鏈的變量只能向上訪問,
變量訪問到window對象即被終止, 做用域鏈向下訪問變量是不被容許的; 做用域就是變量與函數的可訪問範圍, 即做用域控制着變量與函數的可見性 和生命週期。
2. 請說說JavaScript原型,原型鏈 ?
原型:
當咱們訪問一個對象的屬性時,
每一個對象都會在其內部初始化一個屬性,
就是prototype(原型);
原型鏈:
若是這個對象內部不存在這個屬性,
那麼他就會去prototype裏找這個屬性,
這個prototype又會有本身的prototype,
因而就這樣一直找下去,
也就是咱們平時所說的原型鏈;
二者關係:
instance.constructor.prototype = instance.__proto__
3. 請解釋什麼是事件代理?
事件代理(Event Delegation),
又稱之爲事件委託。
是 JavaScript 中經常使用綁定事件
的經常使用技巧。
「事件代理」便是把本來須要綁定
的事件委託給父元素,讓父元素
擔當事件監聽的角色。
事件代理的原理是DOM元素的事件冒泡。
使用事件代理的好處是能夠提升性能,
能夠大量節省內存佔用,減小事件註冊,
好比在ul上代理全部li的click事件;
此外, 還能夠實現動態新增子對象時無需
再次對其綁定事件。
4. new操做符具體完成了哪幾個操做?
1) 建立一個空對象, 定義this 變量引用該對象, 同時還繼承了該函數的原型;
2) 屬性和方法被加入到 this 引用的對象中;
3) 新建立的對象由 this 所引用, 而且最後隱式的返回 this
5. 說幾條寫JavaScript的基本規範?
1) 不要在同一行聲明多個變量;
2) 請使用===/!==來比較true/false或者數值;
3) 使用對象字面量替代new Object這種形式;
4) 減小使用全局函數, 全局變量;
5) switch語句必須帶有default分支;
6) if語句必須使用大括號;
7) for-in循環中的變量; 應該使用var關鍵字明確限定做用域; 從而避免做用域全局污染。
6. 如何判斷一個對象是否爲數組?
function isArray(arg) {
if (typeof arg === 'object') {
return Object.prototype.toString.call(arg) === '[object Array]';
return false; } }
7. 冒泡排序?
思路:
每次比較相鄰的兩個數,
若是後一個比前一個小,換位置;
var arr = [2, 0, 1, 9, 8, 7, 3];
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for(var j = 0; j < arr.length - i - 1; j++) {
if(arr[j + 1] < arr[j]) {
var temp; temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
return arr;
}
console.log(bubbleSort(arr));
function bubbleSort(arr) {
var i = arr.length, j;
var tempExchangVal;
while (i > 0) {
for (j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tempExchangVal = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tempExchangVal;
}
}
i--;
}
return arr;
}
var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
var arrSorted = bubbleSort(arr);
console.log(arrSorted);
alert(arrSorted);
|
控制檯將輸出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
而且彈窗;
8. 快速排序?
思路: 採用二分法,取出中間數,
數組每次和中間數比較,
小的放到左邊,大的放到右邊;
var arr = [2, 0, 1, 9, 8, 7, 3];
function quickSort(arr) {
if(arr.length == 0) {
return []; // 返回空數組
}
var cIndex = Math.floor(arr.length / 2);
var c = arr.splice(cIndex, 1);
var l = [];
var r = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i] < c) { l.push(arr[i]); } else { r.push(arr[i]); } }
return quickSort(l).concat(c, quickSort(r)); }
console.log(quickSort(arr));