题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() ); //
输出结果为10
// 方法一
var fnArr = [];
for(var i = 0; i < 10; i++) {
(function(num) {
fnArr[num] = function() {
return num;
}
})(i)
}
console.log(fnArr[3]()) //
// 方法二
var fnArr = [];
for(var i = 0; i < 10; i++) {
var t = function(num) {
return function() {
return num;
}
}
fnArr[i] = t(i)
}
console.log(fnArr[3]()) //
题目2: 封装一个汽车对象,可以通过如下方式获取汽车状态
var Car = (function() {
var speed = 0;
function setSpeed(s){
speed = s
}
function getSpeed() {
console.log(speed);
}
function accelerate() {
speed += 10;
}
function decelerate() {
speed -= 10;
}
function getStatus() {
if(speed > 0) {
console.log('running');
} else {
console.log('stop');
}
}
return {
setSpeed: setSpeed,
getSpeed: getSpeed,
accelerate: accelerate,
decelerate: decelerate,
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);
}, 0);
var a;
console.log(a); // C
a = 3;
console.log(a); // D
输出结果为 1 3 2
理由 C 和 D代码先执行,虽然设置的是0秒之后执行,但是实际上比0秒多的时间之后执行。
题目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);
}
输出的结果为 0 1 2 3 4
delayer: 5
delayer: 5
delayer: 5
delayer: 5
delayer: 5
for(var i = 0; i < 5; i++) {
(function(i) {
return setTimeout(function() {
console.log('delayer:' + i);
}, 0);
})(i)
console.log(i);
}
题目6: 如何获取元素的真实宽高
<body>
<div id="long">
hihihihih
</div>
<script>
var width = document.getElementById('long');
console.log(width.scrollWidth);
</script>
</body>
题目7: URL 如何编码解码?为什么要编码?
编码encodeURIComponent('你好'); // "%E4%BD%A0%E5%A5%BD"
解码decodeuRIComponent('%E4%BD%A0%E5%A5%BD') // "你好"
应为浏览器地址不允许存在中文。
题目8: 补全如下函数,判断用户的浏览器类型
function isAndroid(){
}
function isIphone(){
}
function isIpad(){
}
function isIOS(){
}
var browser = {
versions: function() {
var u = navigator.userAgent;
function isAndroid() {
console.log( u.indexOf('Android') > -1);
}
function isIphone() {
console.log(u.indexOf('iphone') > -1);
}
function isIpad() {
console.log(u.indexOf('iPad') > -1);
}
function isIOS() {
console.log(!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) > -1);
}
return {
isAndroid: isAndroid,
isIphone: isIphone,
isIpad: isIpad,
isIOS: isIOS,
}
}()
}
browser.versions.isIphone();