1.下面的代碼輸出多少侵续?修改代碼讓fnArr[i]()
輸出 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 ++) {
fnArr[i] = function(){
var n=i
return function(){
return n;
}
}();
}
console.log( fnArr[3]() ); //輸出3
//方法2
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(i){
fnArr[i] = function(){
// console.log(i)
return i
}
})(i)
}
console.log( fnArr[3]() ); //輸出3
2.封裝一個汽車對象喻鳄,可以通過如下方式獲取汽車狀態(tài)
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
...
return {
setSpeed: setSpeed,
...
}
})()
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
//代碼
var Car = (function(){
// speed:速度
var speed = 0;
function setSpeed(s){
speed = s
}
function getSpeed(){
return speed
}
// accelerate:加速
function accelerate(){
return speed += 10
}
// 減速
function decelerate(){
return speed -= 20
}
// 狀態(tài)
function getStatus(){
if(speed === 0){
return "stop"
}else{
return "running"
}
}
return {
setSpeed: setSpeed,
getSpeed: getSpeed,
decelerate: decelerate,
getStatus: getStatus,
accelerate: accelerate
}
})()
// 輸出
Car.setSpeed(30);
Car.getSpeed(); //30
console.log(Car.getSpeed())
Car.accelerate();
Car.getSpeed(); //40;
console.log(Car.getSpeed())
Car.decelerate();
// console.log(Car.decelerate());
console.log(Car.getSpeed()); //20
Car.getStatus(); // 'running';
console.log(Car.getStatus())
Car.decelerate();
Car.getStatus(); //'stop';
console.log(Car.getSpeed())
console.log(Car.getStatus())
// Car.speed; //error
3.下面這段代碼輸出結果是? 為什么?
var a = 1;
setTimeout(function(){
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
// 輸出結果 1 3 2
// 原因: JavaScript 是單線程執(zhí)行的,也就是無法同時執(zhí)行多段代碼确封,當某一段代碼正在執(zhí)行的
// 時候除呵,所有后續(xù)的任務都必須等待,形成一個隊列爪喘,一旦當前任務執(zhí)行完畢颜曾,再從隊列中取出下
// 一個任務。這也常被稱為 “阻塞式執(zhí)行”秉剑。
// 如果代碼中設定了一個 setTimeout泛豪,那么瀏覽器便會在合適的時間,將代碼插入任務隊列侦鹏,
// 如果這個時間設為 0诡曙,就代表立即插入隊列,但不是立即執(zhí)行略水,仍然要等待前面代碼執(zhí)行完畢价卤。
// 所以setTimeout 并不能保證執(zhí)行的時間,是否及時執(zhí)行取決于JavaScript線程是擁擠還是空閑
// 因此渊涝,即使你給setTimeout設定的延時為0ms慎璧,它也不會立即觸發(fā)
4.下面這段代碼輸出結果是? 為什么?
var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
// 答:
// 什么也不會輸出床嫌,while(flag){} 這個條件會無限循環(huán),沒有break或return炸卑。
// 所以后面的都不會執(zhí)行了
5.下面這段代碼輸出既鞠?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))
for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
console.log(i); // 輸出 1 2 3 4 5 5delayer
}
// 第一種
for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
console.log(i);
}
// 第二種
// for(var i=0;i<5;i++){
// setTimeout(function(i){
// return function(){
// console.log('delayer:' + i );
// }
// }(i), 0);
// console.log(i);
// }
6.如何獲取元素的真實寬高
// step1 獲取元素節(jié)點
// var node=document.querySelector("#header")
// step2 利用window.getComputedStyle()獲取寬高
// window.getComputedStyle(node).width
// window.getComputedStyle(node).height
7.URL 如何編碼解碼?為什么要編碼盖文?
-
URL要編碼的原因:URL 只能使用 ASCII 字符集來通過因特網進行發(fā)送嘱蛋。也就是說URL只能使用英文字母、阿拉伯數(shù)字和某些標點符號五续,不能使用其他文字和符號洒敏。
(1)Url編碼通常也被稱為百分號編碼(percent-encoding),是因為它的編碼方式非常簡 單疙驾,使用%百分號加上兩位的字符——0123456789ABCDEF——代表一個字節(jié)的十六進制形式 (2) 對于ASCII字符则北,字母a 在ASCII碼中對應的字節(jié)是0x61鹏溯,那么Url編碼之后得到的就是 %61朋魔,字母abc棚菊, url編碼后得到的就是%61%62%63 對于非ASCII字符,RFC文檔建議使用utf-8對其進行編碼得到相應的字節(jié)扳肛,然后對每個字 節(jié)執(zhí)行百分號編碼傻挂。 如"中文"使用UTF-8字符集得到的字節(jié)為0xE4 0xB8 0xAD 0xE6 0x96 0x87,經過Url編 碼之后得到"%E4%B8%AD%E6%96%87"挖息。 *使用Javascript先對URL編碼金拒,然后再向服務器提交,不要給瀏覽器插手的機會套腹。這樣就 能保證客戶端只用一種編碼方法向服務器發(fā)出請求
-
URL 如何編碼解碼
escape绪抛、encodeURI和encodeURIComponent 編碼
unescape、decodeURI和decodeURIComponent 解碼區(qū)別:escape是對字符串(string)進行編碼电禀,(而另外兩種是對URL)幢码,作用是讓它們在所有電腦上可讀。編碼之后的效果是%XX或者%uXXXX這種形式尖飞。
注意:什么場合用什么方法症副,從實際例子來說
(1)如果只是編碼字符串,不和URL有半毛錢關系葫松,那么用escape瓦糕。
(2)如果你需要編碼整個URL底洗,然后需要使用這個URL腋么,那么用encodeURI。
(3)當你需要編碼URL中的參數(shù)的時候亥揖,那么encodeURIComponent是最好方法珊擂。
參考文章
簡單明了區(qū)分escape圣勒、encodeURI和encodeURIComponent
js對url進行編碼和解碼(三種方式區(qū)別)
8: 補全如下函數(shù),判斷用戶的瀏覽器類型
function isAndroid(){
}
funcnction isIphone(){
}
function isIpad(){
}
function isIOS(){
}
//代碼
function isAndroid(){
return /android/i.test(window.navigator.userAgent);
}
function isIphone(){
return /iphone/i.test(window.navigator.userAgent);
}
function isIpad(){
return /ipad/i.test(window.navigator.userAgent);
}
function isIOS(){
return /ios|iphone/i.test(window.navigator.userAgent);
}
本文題文內容來自于饑人谷摧扇,版權歸饑人谷_海瀚和饑人谷所有圣贸,轉載需說明來源