题目1: 下面的代码输出多少?修改代码让fnArr[i]()
输出 i。使用两种以上的方法
方法一:
var fnArr = [];
for (var i = 0; i < 10; i++) {
fnArr[i] =( function (i) {
return function(){
return i ;
};
})(i);
}
console.log(fnArr[3]()); //
方法二:
var fnArr = [];
for (var i = 0; i < 10; i++) {
(function(i){
fnArr[i] = function(){
return i ;
};
})(i)
}
console.log(fnArr[3]()); //
题目2: 封装一个汽车对象,可以通过如下方式获取汽车状态
var Car = (function () {
var speed = 0;
function setSpeed(s) {
return speed = s
}
function getSpeed() {
console.log(speed)
}
function accelerate(){
return speed+=10;
}
function decelerate(){
if(speed>0){
return speed-=10;
}else{
return speed;
}
}
function getStatus(){
if(speed>0){
console.log('running');
}else{
console.log('stop');
}
}
//...
return {
'setSpeed': setSpeed,
'getSpeed': getSpeed,
'decelerate': decelerate,
'accelerate': accelerate,
'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: 下面这段代码输出结果是? 为什么?
var a = 1;
setTimeout(function () {
a = 2;
console.log(a);//2
}, 0);
var a;
console.log(a); //1
a = 3;
console.log(a); //3
//顺序是: 1 3 2
//因为setTimeout()是异步任务,会在所有同步任务结束之后再执行
题目4: 下面这段代码输出结果是? 为什么?
var flag = true;
setTimeout(function () {
flag = false;
}, 0)
while (flag) { }
console.log(flag);
//setTimeout是异步,会在同步任务执行结束后再执行,
//而因为 flag = true,所以while函数会一直执行,所以也不会输出console.log(flag)
题目5:下面这段代码输出?如何输出delayer: 0, delayer:1...
(使用闭包来实现)
for (var i = 0; i < 5; i++) {
(function(n) {
return setTimeout(function () {
console.log('delayer:' + n);
}, 0);
})(i)
console.log(i);
}
题目6:如何获取元素的真实宽高
通过getComputedStyle来获取,getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象。
window.getComputedStyle(node).height/width
题目7: URL 如何编码解码?为什么要编码?
JavaScript提供四个URL的编码/解码方法。
- decodeURI()
- decodeURIComponent()
- encodeURI()
- encodeURIComponent()
区别
- encodeURI方法不会对下列字符编码
- ASCII字母
- 数字
- ~!@#$&*()=:/,;?+'
- encodeURIComponent方法不会对下列字符编码
- ASCII字母
- 数字
- ~!*()'
因为有时可能需要对URL中的参数进行编码,才不会导致浏览器对URL的识别出现问题。
题目8: 补全如下函数,判断用户的浏览器类型
function isAndroid() {
return /Android/i.test(navigator.userAgent)
}
funcnction isIphone(){
return /iPhone/i.test(navigator.userAgent)
}
function isIpad() {
return /iPad/i.test(navigator.userAgent)
}
function isIOS() {
return /(iPad)|(iPhone)/i.test(navigator.userAgent)
}