1.
var fnArr = []
for (var i=0;i<10;i++){
fnArr[i]=function(){
return i;
}
}
console.log(fnArr[3]()) //10;產(chǎn)生10個(gè)fnArr[i]盯质,但是都輸出了i=10
使用立即執(zhí)行函數(shù)生成閉包署鸡,利用其內(nèi)部函數(shù)讀取該函數(shù)局部作用域
3種方式生成閉包
var fnArr = []
for(var i=0;i<10;i++){
fnArr[i] = (function(){
var n = i
return function(){
return n;
}
}
})()
console.log(fnArr[3]()) //3
//典型閉包,內(nèi)部匿名函數(shù)訪問(wèn)外部函數(shù)作用域
var fnArr = []
for(var i =0; i<10 ; i++){
(function (n){
fnArr[i] = function(){
return n;
}
}
)(i)
};
console.log(fnArr[3]()) //3
<-------------------------------------------------->
var fnArr = []
for(var i =0; i<10 ; i++){
(function (n){
var n = i
fnArr[i] = function(){
return n;
}
}
)()
};
console.log(fnArr[3]()) //3
//這2種方法類似归园,匿名函數(shù)作為變量賦值給fnArr[i]
//在立即執(zhí)行函數(shù)這個(gè)閉包的作用域中
//return n的值就是i的值
2.
輸出汽車參數(shù)的函數(shù)
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
}
function getStatus(){
if(speed>0) console.log('running');
else console.log('stop')
}
return {
"setSpeed": setSpeed,
"getSpeed": getSpeed,
"accelerate": accelerate,
"decelerate": decelerate,
"getStatus": getStatus
} //返回函數(shù)調(diào)用的一個(gè)集合
})()
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.
setTimeout輸出優(yōu)先級(jí)
var a = 1;
setTimeout(function(){
a = 2;
console.log(a); //2产艾;優(yōu)先級(jí)最低 -----Ⅲ
}, 0);
var a ;
console.log(a); //1医男; -----Ⅰ
a = 3;
console.log(a); //3;-----Ⅱ
4.
var flag = true;
setTimeout(function(){ //無(wú)法執(zhí)行到setTimeout
flag = false;
},0)
while(flag){} //flag=true,while函數(shù)無(wú)限循環(huán)
console.log(flag); //瀏覽器卡死蹬癌,無(wú)結(jié)果
5.
原代碼輸出
for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer'+i)
},0);
console.log(i) //0,1,2,3,4,(5)delayer5
}
//按優(yōu)先級(jí)先輸出0权她,1,2逝薪,3隅要,4;
console.log(i)輸出完了之后董济,才輪到setTimeout輸出步清,
這時(shí)候i++后,i變成了5虏肾,再馬上一次性輸出5個(gè)delayer5
修改代碼輸出
for(var i=0;i<5;i++){
setTimeout((function(){
var n = i
return function(){
console.log('delayer'+n) //delayer0廓啊,delayer1,
// delayer2封豪,delayer3谴轮,
// delayer4
}
})(),0);
console.log(i) //0,1吹埠,2第步,3疮装,4
}
<-------------------------------------------------------->
for(var i=0;i<5;i++){
(function(n){
var n = i
setTimeout(function(){
console.log('delayer'+n) //delayer0,delayer1雌续,
//delayer2,delayer3胯杭,
//delayer4
},0);
})(i);
console.log(i) //0驯杜,1,2做个,3鸽心,4
}
6.
獲取元素的真實(shí)寬高
<!DOCTYPE html>
<html>
<head>
<title>獲取元素的真實(shí)寬高</title>
<style type="text/css">
.box{
width: 40px;
height: 20px;
}
</style>
</head>
<body>
<div class="box">
hello
</div>
<script type="text/javascript">
var box = document.getElementsByClassName('box')[0]
var width = getComputedStyle(box)['width']
var height = getComputedStyle(box)['height']
</script>
</body>
</html>
7.
var a = 'https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=ASCII&*'
var encoUrl = encodeURL(a) //簡(jiǎn)單編碼
var encoRrlCpt =encodeURLcomponent(a) //全面編碼
var decorUrl = decodeURL(a) //簡(jiǎn)單解碼
var decoUrlCpt = decodeURLcomponent(a) //全面解碼
var loginUrl = encodeURLcomponent('http://jirengu.com/login.php?' + 'back='+ a) //頁(yè)面跳轉(zhuǎn)返回需要全面解碼
8.
判斷瀏覽器的類型
function isAndroid(){
return /Android/.test(navigator.userAgent)
}
function isIphone(){
return /iphone/.test(navigator.userAgent)
}
function isIpad(){
return /ipad/.test(navigator.userAgent)
}
function isIOS(){
return /ios/.test(navigator.userAgent)
}
console.log(isAndroid())
console.log(isIphone())
console.log(isIpad())
console.log(isIOS())