js一些小題(二)
*******************************************************************
一個全域性下的函式:
function test()
{
alert(this);
}
當直接呼叫時test(); 會彈出object window因為很明顯這裡的this代表全域性.
在頁面新增一個div元素,id為d1:
var odiv=document.getElementById('d1');
odiv.onclick=test; //此時this指向div這是元素。
注意下面程式碼:
odiv.onclick=function(){
test();
};
此時結果依然彈出object window,this依然指向全域性。
*******************************************************************
看下面程式碼:
for(var i=0;i<5;i++)
{
setTimeout(function(){
alert(i);
},1000);
}
你以為會依次彈出0,1,2,3,4?那就錯啦,該程式上來就會彈出5,然後連續彈出5次5。
以下程式碼才會彈出0,1,2,3,4
for(var i=0;i<5;i++)
{
alert(i);
}
***********************************************************************
看下列程式碼:
var obj={};
var newobj={
m1:'mmm1',
m2:'mmm2'
};
for(var e in newobj)
{
obj[e]=function(){
alert(newobj[e]);
}
}
alert(obj==newobj); //false
obj.m1(); //mmm2
obj.m2(); //mmm2
執行結果為false,mmm2,mmm2
****************************************************************************
隨機打亂陣列:
首先要介紹一下關於陣列的sort()排序:
sort()排序並不能實現數值意義上的大小排序,它是按照asc碼進行的排序,所以對於11和2兩個數字來說,sort()排序會認為2大於11,解決方法就是引入一個函式
function compare(a,b){
return a-b;
}
他的是這樣工作的。每次從數組裡面挑選兩個數 進行運算。如果傳入的引數是0 兩個數位置不變。如果引數小於0 就交換位置如果引數大於0就不交換位置接下來用剛才的較大數字跟下一個進行比較。這樣迴圈進行排序。
這樣要對陣列arr排序時 :arr.sort(compare);即可。
由此思想可解決打亂陣列的問題:
function test(a,b){return Math.random()>0.5?1:-1; //這樣會隨機的出現1或-1
}
這樣arr.sort(test);就能打亂陣列。
不行啦,好睏啊,從編輯器裡暫時先找到這幾題貼上來,後續還有,先躺下,明天繼續努力,堅持每天寫一篇,哪怕知識點再小!堅持!