題目1:
輸出10
// 1
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(j) {
fnArr[i] = function() {
return j;
}
})(i)
}
console.log( fnArr[3]() );
// 2
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = (function(j) {
return function() {
return j;
}
})(i)
}
console.log( fnArr[3]() );
// 3
var fnArr = [];
for (let i = 0; i < 10; i ++) {
fnArr[i] = function() {
return i;
}
}
console.log( fnArr[3]() );
題目2
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
function getSpeed() {
return speed;
}
function accelerate() {
speed += 10;
}
function decelerate() {
speed = (speed >=10) ? speed-10 : 0;
}
function getStatus() {
if(speed > 0) {
return 'running';
}else {
return 'stop';
}
}
function checkSpeed() {
if(speed === 0) {
return 'error';
}else {
return speed;
}
}
return {
setSpeed: setSpeed,
getSpeed: getSpeed,
accelerate: accelerate,
decelerate: decelerate,
getStatus: getStatus,
speed: checkSpeed()
}
})()
題目3
輸出1,3,2
定時器中的函數(shù)會被自動放到隊尾執(zhí)行,所以會先依順序輸出1和3,再執(zhí)行定時器中的函數(shù),輸出2
題目4
會無限循環(huán)
定時器中的函數(shù)被自動放到隊尾執(zhí)行,所以首先執(zhí)行while(flag)語句,此時flag=true,所以會無限循環(huán)
題目5
會輸出0,1,2,3,4和5個delayer:5
for(var i=0;i<5;i++){
(function(j){
setTimeout(function(){
console.log('delayer:' + j );
}, 0);
})(i)
console.log(i);
}
題目6 如何獲取元素的真實寬高
var height = window.getComputedStyle(elem,null).getPropertyValue('height')
題目7 URL 如何編碼解碼?為什么要編碼?
- JavaScript提供四個URL的編碼/解碼方法
encodeURI()
encodeURIComponent()
decodeURI()
decodeURIComponent()
encodeURI()著眼于對整個URL進行編碼,因此除了常見的符號以外,對其他一些在網(wǎng)址中有特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼。編碼后,它輸出符號的utf-8形式,并且在每個字節(jié)前加上%。
encodeURIComponent()只轉(zhuǎn)除了語義字符之外的字符,元字符也會被轉(zhuǎn)義。因此,它的參數(shù)通常是URL的路徑或參數(shù)值,而不是整個URL。
- 為什么要編碼?
1.URL只能使用英文字母、阿拉伯數(shù)字和某些標點符號,不能使用其他文字和符號。這意味著,如果URL中有漢字,就必須編碼后使用。
2.URL參數(shù)字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉(zhuǎn)義,也就是對其進行編碼。
題目8
var service = window.navigator.userAgent;
function isAndroid(){
return /android/i.test(service);
}
funcnction isIphone(){
return /iphone/i.test(service);
}
function isIpad(){
return /ipad/i.test(service);
}
function isIOS(){
return /iphone|ipad/i.test(service);
}