- 输出为10
var fnArr = [];
for (var i = 0; i < 10; i ++) {
!function (j) {
fnArr[j] = function(){
return j;
}
}(i)
}
console.log( fnArr[3]() );
或者
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i]=function (i) {
return function () {
console.log(i)
}
}(i)
}
console.log( fnArr[3]() );
var Car = (function () {
var speed = 0;
function setSpeed(s) {
return speed = s
}
function getSpeed(){
console.log(speed)
}
function accelerate(){
return speed += 10
}
function decelerate() {
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);
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';
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在当前代码队列执行结束后再执行,异步执行。
var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
//不输出,因为while(flag)一直为true,所以一直循环,setTimeout无法被执行。
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.如何获取元素的真实宽高
let style= window.getComputedStyle(element);
console.log(style.height, style.width);
7.URL 如何编码解码?为什么要编码?
编码的方式有两种,第一种是使用encodeURI();参数为一个url字符串或字符串对象,通过这种方式编码的url相比encodeURIComponent()编码的将会把元字符和语义字符之外的字符,都进行转义,而后者除了语义字符之外的字符,元字符也会被转义。因此,它的参数通常是URL的路径或参数值,而不是整个URL。答:编码的作用无非就是为了使用起来更加方便轻巧且易于区分,避免造成误会比如当我门要返回一个网址的时候,?back=xxx&value = return.这样便不会把后面的value也当成了前一个网页的参数值.
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)|(iPhone)/i.test(navigator.userAgent);
}