一、 下面的代碼輸出多少?修改代碼讓fnArri 輸出 i。使用兩種以上的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() ); //
方法1
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(n){
fnArr[i] = function(){
return n;
}
})(i);
}
console.log( fnArr[3]() );
方法2
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(){
var n=i;
fnArr[i] = function(){
return n;
};
})();
}
console.log( fnArr[3]() );
方法3
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = (function(n){
var n=i;
return function(){
return n;
}
})();
}
console.log( fnArr[3]() );
二、 封裝一個汽車對象,可以通過如下方式獲取汽車狀態(tài)
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
function getSpeed(){
return speed;
}
function accelerate(){
speed+=10;
}
function decelerate(){
speed-=10;
}
function getStatus(){
if (speed>0) {
return 'running';
}else{
return 'stop';
}
}
return {
setSpeed: setSpeed,
getSpeed: getSpeed,
accelerate: accelerate,
decelerate: decelerate,
getStatus:getStatus
}
})()
Car.setSpeed(30);
console.log(Car.getSpeed()); //30
Car.accelerate();
console.log(Car.getSpeed()); //40;
Car.decelerate();
Car.decelerate();
console.log(Car.getSpeed()); //20
console.log(Car.getStatus()); // 'running';
Car.decelerate();
Car.decelerate();
console.log(Car.getStatus()); //'stop';
三、** 下面這段代碼輸出結(jié)果是? 為什么?
var a = 1;
setTimeout(function(){
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
由于setTimeout()是異步的,在執(zhí)行一個頁面時,即使setTimeout()里的延遲時間設(shè)置為0,仍然要在同步代碼執(zhí)行完畢后,才執(zhí)行setTimeout(),以上代碼等同于
var a = 1;
var a ;
console.log(a);//1
a = 3;
console.log(a);//3
setTimeout(function(){
a = 2;
console.log(a);
}, 0);//2
四、** 下面這段代碼輸出結(jié)果是? 為什么?
var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
以上代碼等同于
var flag = true;
while(flag){}
setTimeout(function(){
flag = false;
},0)//會在while()循環(huán)結(jié)束后執(zhí)行,但是flag=true,會無限循環(huán),setTimeout()不會執(zhí)行
console.log(flag);
五、** 下面這段代碼輸出?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))
for(var i=0;i<5;i++){
(function(){
var n=i;
setTimeout(function(){
console.log('delayer:' + n );
}, 0);
})()
}

Paste_Image.png
六、 如何獲取元素的真實寬高

Paste_Image.png
在IE低版本時用currentStyle代替,使用方法是element.currentStyle
七: URL 如何編碼解碼?為什么要編碼?
js中有兩種編碼方式
encodeURI()方法不會對ASCII字母,數(shù)字,~!@#$&()/;?,+'等進行編碼
encodeURIComponent()方法不會對ASCII字母,數(shù)字,~!()'等進行編碼
解碼方式對應(yīng)為decodeURI()和decodeURICompenent()
http協(xié)議傳輸?shù)膮?shù)是以key-value鍵值對形式的,如果傳遞多個參數(shù),用&對鍵值對進行分割,用=分割出參數(shù)值,但是如果傳遞的參數(shù)本身含有&,=時容易造成歧義。
八、補全如下函數(shù),判斷用戶的瀏覽器類型
function isAndroid(){
return /Andriod/i.test(navigator.userAgent);
}
function isIphone(){
return /iphone/i.test(navigator.userAgent);
}
function isIpad(){
return /ipad/i.test(navigator.userAgent);
}
function isIOS(){
return /ios/i.test(navigator.userAgent);
}