1.什么是閉包?舉例說明
從作用域鏈談閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)询筏,
閉包實現(xiàn)累加效果
function addcount(){
? ? ? var num = 0;
? ? ? return function(){
? ? ? ? ? ? ? return num += 1;
? ? ? ? }
}
var add = addcount();
console.log(add());
console.log(add());
3.冒泡機制實現(xiàn)數(shù)組排序 從小到大
var arr = [7,4,9,1,6,2];
function sortAt(num){
? ? ? ? for(var i = 0 ;i < arr.length-1; i++ ){
? ? ? ? ? ? ? ? ? ? for(var j = i+1; j < arr.length;j++){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var v = arr[i]; //前一個的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(v > arr[j]){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var index = arr[j]; //后一個的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arr[i] = index;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arr[j] = v;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return arr;
}
console.log(sortAt(arr));
6.Js實現(xiàn)繼承的方法
第一種方法榕堰,借用構(gòu)造函數(shù)實現(xiàn)繼承
function Person(){
? ? ? ? ? ? this.name = "nana"
}
function Teacher(){
? ? ? ? ?Person.call(this);
? ? ? ? ?this.type="teacher";
}
Teacher無法繼承Person的原型對象,并沒有真正的實現(xiàn)繼承(部分繼承)嫌套;
第二種方法逆屡,借用原型鏈實現(xiàn)繼承
function Person(){
? ? ? ? ? this.name = "nana";
? ? ? ? ? this.play = 123;
}
function Teacher(){
? ? ? ? ?this.type="teacher";
}
Teacher.prototype = new Person();
7.DOM事件
DOM事件模型是什么:指的是冒泡和捕獲踱讨;
DOM事件流是什么:捕獲階段 => 目標(biāo)階段 => 冒泡階段
DOM事件捕獲的具體流程:window=>document=>html標(biāo)簽=>body=>目標(biāo)對象
8.事件委托
事件委托就是利用冒泡的原理魏蔗,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果痹筛。
<ul id="list">
? ? ? ? <li>item1</li>
? ? ? ? <li>item2</li>
? ? ? ? <li>item3</li>
</ul>var list = document.getElementById("list");
list.addEventListener('click',function(event){
? ? ? ? ?event = event || window.event;
? ? ? ? ?var target = event.target || event.srcElement;
? ? ? ? ?if(target.nodeName == "LI"){
? ? ? ? ? ? ? ? ? ?alert(target.innerHTML);
? ? ? ? ?}
})
9.事件監(jiān)聽
.onclick 常規(guī)的事件綁定只執(zhí)行最后綁定的事件
btn.addEventListenter('click',function(){}) ?//可綁定多個事件
btn.attachEvent("onclcik",function(){})
10.ajax跨域
ajax出現(xiàn)請求跨域錯誤問題莺治。主要是因為瀏覽器的“同源策略”。同源策略指的是協(xié)議相同帚稠,域名相同谣旁,端口相同。
如何解決ajax跨域問題
1.jsonp滋早¢螅客戶端網(wǎng)頁通過添加了一個script元素,向服務(wù)器請求json數(shù)據(jù)杆麸,這種做法不受同源政策搁进;
2.代理請求方式解決接口跨域問題;配置proxy
11.mouseover 和 mouseenter的區(qū)別
mouseover浪感,當(dāng)指針穿過被選元素和子元素時,都會被觸發(fā)饼问;
mouseenter ,當(dāng)指針穿過被選元素時會被觸發(fā)篮撑;
12.行內(nèi)點擊事件改變樣式
onclick="style.backgroundColor ='red';style.Color='#333';"
13.js中判斷JSON數(shù)據(jù)是否存在某字段的方法
方法一: !('key'? in? obj)
方法二:obj.hasOwnProperty('key')?
15.作用域知識點
window.val = 1;
var json = {
? ? ? val:10,
? ? ? a:function(){
? ? ? ? ? ? ? this.val *= 2;
? ? ? ? ? ? ? return this.val;
? ? ? }
}
console.log(json.a());?
var a = json.a;? ?
console.log(a());?
json.a.call(window);?
console.log(json.a());?
console.log(window.a()) ;??
//20
//2
//40
//8
16.作用域知識點
a方法里作用域?qū)儆趙indow環(huán)境,所以此時匆瓜,val的的值屬于window.val? =1 ;
;(function(){
? ? ? ?var val = 1;
? ? ? ?var json = {
? ? ? ? ? ? ? val:10,
? ? ? ? ? ? ? a:function(){
? ? ? ? ? ? ? ? ? ? ? ? ?val *= 2;
? ? ? ? ? ? ? ?}
? ? ? ?};
? ? ?json.a();??
? ? ?console.log(json.val + val)? ?
}())//12
18.原型鏈繼承知識點
B繼承A.prototype原型鏈上的方法赢笨;但屬性不繼承;
構(gòu)造函數(shù)如果有屬性時驮吱,會先找構(gòu)造函數(shù)里的屬性值茧妒,如果沒有,繼續(xù)找prototype上是否有屬性一值左冬;
function A(x){
? ? ? ? this.x = x;
}
A.prototype.x = 1;
function B(x){
? ? ? ? this.x =x;
}
B.prototype = new A();
var a = new A(2);
var b = new B(3);
delete b.x;
console.log(a.x);
console.log(b.x);
// 2
//undefined
22.?下面的代碼會輸出什么桐筏?為啥?
for(var i = 0; i < 5; i++) {
? ? ? ? setTimeout(
? ? ? ? ? ? ?function() { console.log(i);
? ? ? ? }, i * 1000 );
}
輸出5個5
25.神馬是 NaN拇砰,它的類型是神馬梅忌?怎么測試一個值是否等于 NaN?
NaN? ?(Not a Number 它不是一個數(shù)字) 類型是Number, isNaN()? ??
isNaN(23)? //false? isNaN('true')? ?//true
26.值類型和引用類型的區(qū)別
值類型 :將變量中的數(shù)據(jù)完整的拷貝一份,賦值給新的變量
var num = 123; var num1 = num;
console.log(num + num1)? ?//123,123
num = 1;
console.log(num + num1) //1,123
引用類型:表示變量存儲的是數(shù)據(jù)的地址除破,復(fù)制時只是把地址復(fù)制一份牧氮,同時指向數(shù)據(jù)
var o ={n:123}; var o1 = o;
console.log(o.n + o1.n); //123,123
o1.n = 1;
console.log(o.n + o1.n); //1,1
27.深拷貝和先拷貝
淺復(fù)制是對對象地址的復(fù)制,并沒有開辟新的棧瑰枫,也就是復(fù)制的結(jié)果是兩個對象指向同一個地址踱葛,修改其中一個對象的屬性,則另一個對象的屬性也會改變光坝。
深復(fù)制則是開辟新的棧尸诽,兩個對象對應(yīng)兩個不同的地址,修改一個對象的屬性盯另,不會改變另一個對象的屬性性含。
function deepCopy (data) {? ?
? ? ? ? ? ?return JSON.parse(JSON.stringify(data));
}
28.call和apply方法;
作用:.改變執(zhí)行上下文 實現(xiàn)繼承
第一個參數(shù) 指向的是一個對象(調(diào)用對象)鸳惯,只是apply的參數(shù)只有2個商蕴,第2個參數(shù)其實是一個偽數(shù)組
function superClass () {
? ? ? ? ? ? this.a = 1;
? ? ? ? ? ? this.print = function () {
? ? ? ? ? ? ? ? ? ?console.log(this.a);
? ? ? ? ? ? }
}
function subClass () {
? ? ? ? ? ? superClass.call(this);
? ? ? ? ? ? this.print();
}
subClass();
29.cmd和amd 的區(qū)別?
cmd和amd都是模塊開發(fā)的一種規(guī)范(模塊定義規(guī)范),amd加載模塊是提前加載模塊悲敷,cmd是延遲加載究恤,就近加載
define(function(require,exports,module{
? ? ? ? ?var? ? a=require('./a')
? ? ? ? ?a.doSomething()
? ? ? ? ?var? ? b=require('./b')
? ? ? ? ?b.doSomething();
})? //cmd
define(['./a','./b'],function(a,b){
? ? ?a.doSomething()
? ? ?b.doSomething()
})? //amd
html&&css
1.alt和title的異同
alt是圖片加載失敗時,顯示在網(wǎng)頁上替代的字后德;搜索引擎對圖片的判斷,主要是靠alt屬性抄腔。以簡要文字說明瓢湃,同時包含關(guān)鍵字理张。
title是鼠標(biāo)放在圖片上,顯示的文字绵患,是對圖片進一步的說明雾叭;
2.簡述一下src和href的區(qū)別;
href用于錨點或者文檔之間的鏈接落蝙,用于超鏈接织狐;
src指向外部資源的位置,指向的內(nèi)容將會嵌套在文檔中當(dāng)前標(biāo)簽所在位置筏勒;例如img,script;
3.html5新元素移迫;
新的表單控件;date管行、time厨埋、email
新的特殊內(nèi)容標(biāo)簽;footer捐顷、header荡陷、nav、aside
對本地離線儲存有了更好的支持迅涮;
用于媒介回放的video和audio;
4.什么是css hack
針對不同的瀏覽器寫不同的css,就是css hark废赞;
ie7 *background:blue; ie5 _background:red;
前綴加_或者*......
5.px和em的區(qū)別
px的值是固定的,是絕對單位叮姑,指定多少是多少蛹头,寫出來的大小只能和設(shè)計稿上的一樣;
em的值是相對于父級戏溺,是個相對元素,每次換算可能費點時間渣蜗,考慮父元素的設(shè)置大小旷祸;
rem是相對元素耕拷,指相對于根元素也就是html;html{font-size:62.5%} ?h1{font-size:2.4rem}
6.html5離線儲存
localStorage :長期儲存數(shù)據(jù)托享,瀏覽器關(guān)閉后數(shù)據(jù)也不會丟失
sessionStorage :數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除骚烧;
7.移動端事件延遲300毫秒的問題
為什么會有300毫秒的延遲等待時間;這與雙擊縮放的方案有關(guān)闰围;瀏覽器捕獲第一次單擊后赃绊。會先等待一段時間,如果這段時間里羡榴,用戶進行了第二次單擊操作碧查,則瀏覽器會進行雙擊事件處理;如果沒有,則進行單擊事件的處理忠售。
解決方案1:meta標(biāo)簽禁止縮放
解決方案2:fastclick.js
8.服務(wù)器返回狀態(tài)了解
301传惠,302 重定向;
304 帶緩存刷新稻扬;
500 服務(wù)器錯誤卦方;