1.下面的代碼輸出多少髓堪?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() ); //10
//#1
var fnArr = []
for (var i = 0; i < 10; i ++) {
(function(){
var n = i
fnArr[i] = function(){
return n
}
})()
}
console.log( fnArr[3]() ) //3
//#2
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = (function(){
var n=i
return function(){
return n
}
})()
}
console.log( fnArr[3]() ); //3
2.封裝一個(gè)汽車對(duì)象娘荡,可以通過(guò)如下方式獲取汽車狀態(tài)
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
function accelerate(){
speed = speed+10
}
function decelerate(){
speed = speed-10
}
function getSpeed(){
console.log(speed)
}
function getStatus(){
if(speed){
console.log('running')
}else{
console.log('stop')
}
}
return {
setSpeed:setSpeed,
getSpeed:getSpeed,
accelerate:accelerate,
decelerate:decelerate,
getStatus:getStatus
}
})()
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // 'running';
Car.decelerate();
Car.decelerate();
Car.getStatus(); //'stop';
//Car.speed; //error
3.下面這段代碼輸出結(jié)果是? 為什么?
var a = 1;
setTimeout(function(){
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
//1 3 2
//因?yàn)閟etTimeout第二個(gè)參數(shù)告訴js什么時(shí)候?qū)⑵浞湃雸?zhí)行隊(duì)列中干旁,但是如果當(dāng)前隊(duì)列中不是空的,setTimeout會(huì)被放在隊(duì)尾執(zhí)行炮沐。
//上述代碼除了setTimeout之外的其他代碼都先執(zhí)行争群,最后再執(zhí)行setTimeout
4.下面這段代碼輸出結(jié)果是? 為什么?
var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
//沒(méi)有輸出,setTimeout放在當(dāng)前隊(duì)列的隊(duì)尾央拖,所以flag賦值為true后祭阀,執(zhí)行while,跳不出循環(huán)了鲜戒,setTimeout也執(zhí)行不了了
5.下面這段代碼輸出专控?如何輸出delayer: 0, delayer:1...(使用閉包來(lái)實(shí)現(xiàn))
for(var i=0;i<5;i++){
(function(){
var n = i
setTimeout(function(){
console.log('delayer:' + n );
}, 0);
})()
console.log(i);
}
6. 如何獲取元素的真實(shí)寬高
getComputedStyle()返回的樣式是一個(gè)實(shí)時(shí)的 CSSStyleDeclaration對(duì)象,當(dāng)元素的樣式更改時(shí)遏餐,它會(huì)自動(dòng)更新本身伦腐。
<style>
div{
height: 100px;
background-color: red;
}
</style>
<div>123</div>
<script>
var div = document.querySelector('div')
var a = getComputedStyle(div).height
var b = getComputedStyle(div).width
console.log(a,b)//100px 443px
</script>
7.URL 如何編碼解碼?為什么要編碼失都?
//解碼
decodeURI()
decodeURIComponent()
//對(duì)應(yīng)編碼
encodeURI() //不對(duì)ASCII字母or數(shù)字or~!@#$&*()=:/,;?+'進(jìn)行編碼
encodeURIComponent()//不對(duì)ASCII字母or數(shù)字or~!*()'進(jìn)行編碼
- 網(wǎng)絡(luò)標(biāo)準(zhǔn)規(guī)定:只有字母和數(shù)字[0-9a-zA-Z]柏蘑、一些特殊符號(hào)"$-_.+!*'(),"[不包括雙引號(hào)]、以及某些保留字粹庞,才可以不經(jīng)過(guò)編碼直接用于URL咳焚。所以對(duì)于漢字等字符需要編碼
- 對(duì)于使用了有特殊含義字符的參數(shù)需要進(jìn)行編碼,以免造成歧義庞溜。字符(!$&'()*+,;=)用于在每個(gè)組件中起到分隔作用的革半,如=用于表示查詢參數(shù)中的鍵值對(duì),&符號(hào)用于分隔查詢多個(gè)鍵值對(duì)流码。當(dāng)組件中的普通數(shù)據(jù)包含這些特殊字符時(shí)又官,需要對(duì)其進(jìn)行編碼。
8.補(bǔ)全如下函數(shù)漫试,判斷用戶的瀏覽器類型
function isAndroid(){
return (/android/i.test(navigator.userAgent))
}
function isIphone(){
return (/iphone/i.test(navigator.userAgent))
}
function isIpad(){
return (/ipad/i.test(navigator.userAgent))
}
function isIOS(){
return (/(ipad)|(iphone)/i.test(navigator.userAgent))
}