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);就能打亂數組。



不行啦,好睏啊,從編輯器裏暫時先找到這幾題貼上來,後續還有,先躺下,明天繼續努力,堅持每天寫一篇,哪怕知識點再小!堅持!












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章