1. 程式人生 > >js一些小題(二)

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);就能打亂陣列。

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