一:排序算法
/*
sort方法:sort() 方法用于对数组的元素进行排序。
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
排序算法:
1:找一个基准点
2:建立两个数组,分别存储在左边和右边的数组
3:利用递归进行下次比较
*/
alert(querySort([12,5,37,6,33,50]));
function querySort(arr){
if(arr.length <= 1){
return arr;
}
var num = Math.floor(arr.length / 2);
// var numValue = arr[num]; 错误
var numValue = arr.splice(num,1);
var left = [];
var right = [];
for(var i=0;i<arr.length;i++){
if( arr[i] < numValue){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return querySort(left).concat([numValue],querySort(right));
}
二、函数声明与函数表达式
/**
* 函数声明
* function 函数名(){}
* 函数表达式
* function 函数名(可写可不写:匿名表达式,命名函数){}
*
* 函数声明和函数表达式的区别
* 1:函数表达式可以直接后边加括号执行,而函数声明不行
* function aaa(alert("aaa"))(); //不执行
* var a = function aaa(){alert(2)}() //执行
* 2:函数声明可以预解析
*/
function aaa(){
//函数声明
}
var a = function aaa(){} //命名函数表达式
var a = function (){} //匿名函数表达式
(function aaa(){}) //函数表达式
~function aaa(){} //函数表达式
函数预解析实例一:函数声明会预解析在浏览器中表现的方式会不一样
if(true){
function aaa(){
alert(1);
}
}else{
function aaa(){
alert(2);
}
}
aaa();
//函数预解析实例二:在各个浏览器中的表现方式一致
if(true){
var a = function aaa(){
alert(1);
}
}else{
var a = function aaa(){
alert(2);
}
}
a();
//匿名函数和命名函数的区别
//实例三:
var a = function aaa(){
alert(1);
alert(typeof aaa) //但是在函数内部可以调用
}
a() //没有问题
aaa() //在标准浏览器下会报错内部的名字不能被调用,但(是函数内部可以调用), ie8下会将函数解析为两个函数a,aaa