数组的定义
1.通过构造函数创建数组:
var 数组名 = new Array(值);
注意:值为一个数字时,表示数组长度;值为多个数字时,表示数组的数据。
2.通过字面量的方式创建数组:
var arr = [];
注意:数组中存储的数据类型可以不一样。
for循环遍历数组:
for(var i = 0;i<arr.length;i++){
}
反转数组(把数组中的数据的位置调换):
for(var i =0;i<arr.length/2;i++){ //循环的目的是控制交换的次数
var temp = arr[i];
arr[i] =arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
冒泡排序(把一组数据按一定顺序排列):
for(var i=0;i<arr.length-1;i++){ //循环控制比较的轮数
for(var j =0;j<arr.length-1-i;j++){ //循环控制每一轮比较的次数
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
}
}
console.log(arr);
函数
- 当函数被调用时,需要这个返回值,那么定义变量接收即可。
- 形参和实参个数可以不一致。
- 如果一个函数中没有明确的返回值,那么调用的时候接收了,结果就是undefined
如果没有明确的返回值:
1.函数中没有return;
2.函数中有return,但是return后面没有任何内容。
- return下面的代码时不会执行的。
注意:
function f1(){
var num = 10; //console.log(f1) 打印的时函数里面具体的代码
}
console.log(arguments.length) //获取的是函数在调用时传入的参数的个数
匿名函数不能直接调用。
两种定义方式:
1.函数声明:
function f1(){
};
f1();
2.函数表达式(把一个函数给一个变量):
var f1= function(){
};
f1();
注意:
- 函数声明时后面覆盖前面;函数表达式中不覆盖。
- 函数可以作为参数使用,如果函数作为参数,那么我们就说这个参数(函数)叫做回调函数。
- 函数是可以作为返回值使用的。
局部变量与全局变量
局部变量:在函数内部定义的变量是局部变量,在外部不能使用。
js中没有块级作用域,但是函数除外。
隐式全局变量:声明的变量没有var,就叫做隐式全局变量。
全局变量不能被删除。 隐式全局变量可以被删除。
var num1=10;
num2=20;
delete num1;
delete num2;
console.log(typeof num1); //Number
console.log(typeof num2); //undefined
预解析:提前解析代码
1.变量声明提前(提前到当前所在的作用域最上面)
2.函数声明提前(提前到当前所在的作用域最上面)
console.log(num); //undefined(把变量的声明提前了)
var num =10;
函数在调用的时候,会把函数的声明提前到当前作用域的最上面。如下代码:
function f1(){
console.log(num); //undefined
var num =10;
}
f1();
- 预解析中,变量的提升,只会在当前的作用域提升,提升到当前的作用域的最上面。
- 函数中的变量只会提前到函数的作用域中的最前面,不会出去。
- 预解析会分段(多对的script标签中的函数重名,预解析的时候不会冲突)
f1(); function f1(){
console.log(c); //9 var a;//局部变量
console.log(b); //9 a=9;
console.log(a); //报错 b=9;//隐式全局变量
function f1(){ c=9;//隐式全局变量
var a=b=c=9; 变形为=> console.log(a,b,c); // 9,9,9
console.log(a); //9 }
console.log(b); //9 f1();
console.log(c); //9 console.log(c,b,a);//9,9,报错
}
如下的代码在执行的时候,f1作为一个变量在执行的时候“var f1;”会被提升到最前面,此时f1()不能完成调用。
f1(); // 不能调用
var f1 = function(){
console.log(a);
var a= 10;
}