1、修改代码让 fnArr [i] () 输出 i
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() ); //10,for循环结束后i的值为10
方法一:
立即执行函数内return匿名函数方法二:
立即执行函数内创建fnArr[i]为匿名函数方法三:
立即执行函数通过传参来实现闭包的效果2、封装一个汽车对象,可以通过如下方式获取汽车状态
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
function getSpeed(){
return speed;
}
function accelerate(){ //加速10
return speed += 10;
}
function decelerate(){ //减速10
return speed -= 10;
}
function getStatus(){
if(speed>0){
return 'running';
}else{
return 'stop';
}
}
return {
'setSpeed': setSpeed,
'getSpeed': getSpeed,
'accelerate': accelerate,
'decelerate': decelerate,
'getStatus': getStatus
}
})()
Car.setSpeed(30);
console.log(Car.getSpeed()) //30
Car.accelerate();
console.log(Car.getSpeed()) //40
Car.decelerate();
Car.decelerate();
console.log(Car.getSpeed()) //20
console.log(Car.getStatus()) // 'running';
Car.decelerate();
Car.decelerate();
console.log(Car.getStatus()) //'stop';
闭包封装
3、下面这段代码输出结果是? 为什么?
var a = 1;
setTimeout(function(){ //setTimeout()函数,最后执行
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
输出结果:1、3、2;执行循序总延时函数放在最后
4、下面这段代码输出结果是? 为什么?
var flag = true;
setTimeout(function(){ //延时函数最后执行
flag = false;
},0)
while(flag){}
console.log(flag);
不输出任何结果,在while(flag){}中进入死循环(flag一直为true)
5、下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)
for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
console.log(i);
}
输出:
image.png 闭包实现
6、如何获取元素的真实宽高
getComputedStyle(ele)['height'] //获取当前元素最终CSS样式的高
getComputedStyle(ele)['width'] //获取当前元素最终CSS样式的宽
7、 URL 如何编码解码?为什么要编码?
JavaScript提供四个URL的编码/解码方法。
编码: encodeURI()、 encodeURIComponent()
解码: decodeURI()、decodeURIComponent()
为什么要编码:对于不同的操作系统、不同的浏览器、不同的网页字符集采用的是不同的编码,也将导致完全不同的编码结果。但是我们可以使用Javascript先对URL编码,然后再向服务器提交,不给浏览器编码的机会,从而保证服务器得到的数据是格式统一。
区别:
encodeURI方法不会对下列字符编码:
- ASCII字母
- 数字
- ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码
- ASCII字母
- 数字
- ~!*()'
可以看出encodeURIComponent比encodeURI 编码的范围更大。
8、补全如下函数,判断用户的浏览器类型
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)|(iphpne)/.test(navigator.userAgent)
}
网友评论