闭包_定时器_BOM

1. 下面的代码输出多少?修改代码让 fnArr[i]() 输出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(i){ fnArr[i] = function(){ return i; }; }(i)) } console.log( fnArr[3]() ); //输出3; 修改二: var fnArr = []; for (var i = 0; i < 10; i ++) { fnArr[i] = (function(i){ return function(){ return i; }; }(i)) } console.log( fnArr[3]() ); //输出3;

2.封装一个汽车对象,可以通过如下方式获取汽车状态。

var Car = (function () { var speed = 0; function setSpeed(s) { speed = s } function getSpeed() { return speed; } function accelerate(i = 10) { speed += i; } function decelerate(i = 10) { speed -= i; } function getStatus() { if (speed > 0) { return 'running'; } else { return '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); a = 3; console.log(a); //依次输出1,3,2 因为setTimeout会在当前代码执行队列结束后执行;

4.下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)

`for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
})(i);
console.log(i);
} //输出:0,1,2,3,4,delayer:0,delayer:1,delayer:2,delayer:3,delayer:4

5.如何获取元素的真实宽高 ?

function style(element,pseduoElement){ return element.currentStyle ?element.currentStyle : window.getComputedStyle(element,pseduoElement); } var twidth=style(element).width; var theight=style(element).height; var tbackground=style(element).backgroundColor;

6. URL 如何编码解码?为什么要编码?

  • 使用encodeURI()/encodeURIComponent()进行编码;使用decodeURI()/decodeURIComponent()进行解码;
  • 因为需要编码URL中的参数还是URL的时候,不编码就会错误,那么encodeURIComponent是最好方法。如果不对参数的值编码,容易造成歧义。

7. 补全如下函数,判断用户的浏览器类型

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 /iphone|ipad/i.test(navigator.userAgent); }

8.

你可能感兴趣的:(闭包_定时器_BOM)