题目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
定时器中的函数会被自动放到队尾执行,所以会先依顺序输出1和3,再执行定时器中的函数,输出2
题目4
会无限循环
定时器中的函数被自动放到队尾执行,所以首先执行while(flag)
语句,此时flag=true
,所以会无限循环
题目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进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
encodeURIComponent()只转除了语义字符之外的字符,元字符也会被转义。因此,它的参数通常是URL的路径或参数值,而不是整个URL。
- 为什么要编码?
1.URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。这意味着,如果URL中有汉字,就必须编码后使用。
2.URL参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
题目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);
}