碰到问题就要去查、去问,在查的过程中你会发现更多放入东西,也许这就是学习吧。
作为一个js还没入门的菜鸟级的人物,第一次见到这段代码时,是百思不得其解。
代码如下:
function mysort( ){ //从小到大排序
var tags = new Array();
for(var i = 0; i < arguments.length; i ++){
tags[i] = arguments[i];
}
tags.sort(function(a,b ){
return a-b;
});
return tags;
}
var result = mysort(10,4,2,11,33,5);
console.log(result);//输出结果[2, 4, 5, 10, 11, 33]
然后我进行了如下的改动:
将 tags.sort(function(a,b ){ return a-b; }
改成了 function sort(a,b){
return a-b;
}
tags.sort(); //输出[10, 11, 2, 33, 4, 5]
然后经过一番查询,我了解到这里的function sort是没有用的,tags直接调用了sort方法,以字符串的形式在比大小,所以得到以上结果。还了解到了回调函数,以下是我对回调函数的理解:
function f1(callback){
console.log("先执行");
callback();
}
function f2(){
console.log("后执行");
}
f1(f2);//输出:先执行
后执行
回调函数即在函数f1中调用函数f2,先执行f1,在执行f2;如果后面有f3,f1执行时间较长,则会先执行f3.
例如:我需要去超市买东西,可是我马上要开始工作了,那么我就可以让别人帮我去买东西,我去工作,买回来之后我检查一下东西买的是否齐全。那么这里f1:去超市买东西;f2:检查;f3:工作。
上面那段代码写成这样:
function mysort( ){
var tags = new Array();
for(var i = 0; i < arguments.length; i ++){
tags[i] = arguments[i];
}
tags.sort(s);
return tags;
}
function s(a,b ){
return a-b;
}
var result = mysort(10,4,2,11,33,5);
console.log(result);
或者这样:
function mysort( ){
var tags = new Array();
for(var i = 0; i < arguments.length; i ++){
tags[i] = arguments[i];
}
var s = function(a,b ){
return a-b;
}
tags.sort(s);
return tags;
}
var result = mysort(10,4,2,11,33,5);
console.log(result);
那麽现在又涉及到一个同步异步的问题,简单说一下我对同步异步的理解。
同步:程序按从上到下的顺序执行,只有前面的函数执行完成之后,后面的函数才能开始执行;
异步:参照物是某个线程,在线程x之外做一个任务a而不阻塞线程x让线程x可以做其他的任务b
注:Javascript是单线程
在改动的同时了解到,要想为Array增加方法需要通过prototype属性添加。
现在为Array添加一个原型方法,删除数组中重复的元素。
Array.prototype.s=function(){
var del=[];
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;){
if(this[i]===this[j]){
del.push(this.splice(j,1)[0]);
}else{
j++;
}
}
}
console.log(del);
}
var a=[9,11,5,7,9];
a.s();
//输出结果为:[9]
function unique(arr){
var set = new Set(arr);
return Array.from(set);
}
var arr = [10,9,8,7,6,8,9];
unique(arr); //[10, 9, 8, 7, 6]
var set = new Set(arr);
set; //Set {10, 9, 8, 7, 6}
Array.from(set); //[10, 9, 8, 7, 6]