1下面的代碼輸出多少积仗?修改代碼讓 fnArr[i]()
輸出 i藤滥。使用 兩種以上的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() ); //
第一種方法:創(chuàng)建函數(shù)
var fnArr = [];
for(var = i; i < 0; i++){
var temp = function(i){
fnArr[i] = function(){
return i;
}
}
temp(i)
}
console.log( fnArr[3]()); //3
第二種方法:立即執(zhí)行函數(shù)
var fnArr = [];
for (var i = 0; i < 10; i++) {
!function(i) {
fnArr[i] = function() {
return i;
}
}(i)
}
console.log(fnArr[3]()); //3
方法三:函數(shù)return函數(shù)
var fnArr = [];
for (var i = 0; i < 10; i++) {
fnArr[i] = function (i) {
return function () {
return i;
}
}(i);
}
console.log(fnArr[3]());//3
2封裝一個(gè)汽車對(duì)象委造,可以通過如下方式獲取汽車狀態(tài)
var Car = (function(){
var speed = 0;
function setSpeed(s){ //傳入速度
speed = s
}
function getSpeed(){ //獲得速度
return speed
}
function accelerate(){ //加速 +20
speed+=10
}
function decelerate(){ //減速 -10
speed>0?speed-=10:speed;
}
function getStatus(){ //判斷運(yùn)行狀態(tài) running或者stop
return speed>0?'running':'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
可以把代碼看成
var a;
var a = 1;
console.log(a);
a = 3;
console.log(a);
setTimeout(function(){
a = 2;
console.log(a);
}, 0);
- 代碼依次往下執(zhí)行伪阶,首先看到定時(shí)器腺办,即時(shí)定時(shí)器設(shè)置的時(shí)間間隔為0腕扶,但不會(huì)立即執(zhí)行藻雌,還是會(huì)有默認(rèn)的40毫秒左右的時(shí)間差雌续,所以這個(gè)時(shí)候?yàn)g覽器會(huì)先解析完其他的代碼,然后看到var a 胯杭,a的聲明提升并賦值a=1驯杜,所以第一個(gè)打印是全局中的a,打印出1做个;
- 接著讀到a=3鸽心,即給全局中的變量a賦值為3滚局,打印出3;
- 最后執(zhí)行定時(shí)器函數(shù)顽频,延時(shí)為0藤肢,立即執(zhí)行函數(shù),a = 2改變?nèi)肿兞縜的值糯景,輸出變量a嘁圈,打印出2.
4.下面這段代碼輸出結(jié)果是? 為什么?
var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
// while(flag){}無線循環(huán)后面的都不執(zhí)行
// 因?yàn)閟etTimeout要等到后面的執(zhí)行后才執(zhí)行; while(flag){}的flag為true所以while無限循環(huán)蟀淮;co
nsole.log(flag);不執(zhí)行
5下面這段代碼輸出丑孩?如何輸出delayer: 0, delayer:1...(使用閉包來實(shí)現(xiàn))
for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
console.log(i);
}
Console Run Clear
//0
//1
//2
//3
//4
//"delayer:5"
//"delayer:5"
//"delayer:5"
//"delayer:5"
//"delayer:5"
代碼
for (var i = 0; i < 5; i++) {
!function() {
var j = i;
setTimeout(function() {
console.log('delayer:' + j);
}, 0);
}()
}
//"delayer:0"
//"delayer:1"
//"delayer:2"
//"delayer:3"
//"delayer:4"
6如何獲取元素的真實(shí)寬高?
element.offsetWidth 和 element.offsetHeight 獲取
7URL 如何編碼解碼?為什么要編碼灭贷?
解碼:
decodeURI()
decodeURIComponent()
編碼:
encodeURI()
encodeURIComponent()
【文檔標(biāo)準(zhǔn)】
RFC3986文檔規(guī)定,Url中只允許包含英文字母(a-zA-Z)略贮、數(shù)字(0-9)甚疟、-_.~4個(gè)特殊字符以及所有保留字符。RFC3986文檔對(duì)Url的編解碼問題做出了詳細(xì)的建議逃延,指出了哪些字符需要被編碼才不會(huì)引起Url語義的轉(zhuǎn)變览妖,以及對(duì)為什么這些字符需要編碼做出了相應(yīng)的解釋。
HTTP協(xié)議中通過URL傳參是通過鍵值對(duì)形式進(jìn)行的揽祥,格式上是以讽膏?、&和=為特征標(biāo)識(shí)進(jìn)行解析拄丰,如果鍵或者值的內(nèi)容中包含這些符號(hào)府树,就會(huì)造成解析錯(cuò)誤,所以要進(jìn)行編碼料按,用不會(huì)造成歧義的符號(hào)代替有歧義的符號(hào)奄侠。
URL編碼的原則就是使用安全的字符(沒有特殊用途或者特殊意義的可打印字符)去表示那些不安全的字符。
8補(bǔ)全如下函數(shù)载矿,判斷用戶的瀏覽器類型
function isAndroid(){
return /Android/.test(navigator.userAgent);
}
funcnction isIphone(){
return /iPhone/.test(navigator.userAgent);
}
function isIpad(){
return /iPad/.test(navigator.userAgent);
}
function isIOS(){
return /(iPad)|(iPhone)/i.test(navigator.userAgent);
}