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);就能打乱数组。

不行啦,好困啊,从编辑器里暂时先找到这几题贴上来,后续还有,先躺下,明天继续努力,坚持每天写一篇,哪怕知识点再小!坚持!

上一篇:Javascript 模块模式


下一篇:【131031】 的功能