全局变量:在定义变量的时候,没有被任何括号括起来的变量,作用域从变量定义开始到文件结束
优点:可以方便在页面之间传递数据,一开始定义后在整个文件里面都可以使用
缺点:1.降低函数的独立性,2.生命周期长占内存
局部变量:在定义时被任何括号括起来的变量,作用域为该函数体
js允许函数嵌套定义
作用域链:子函数可以访问父函数的内部变量,规则为向上查找,反之父函数不能使用子函数的内部变量。
递归:一个函数直接或者间接的调用自己本身
数组:存储数据的容器
内置基本类型:在内存中只有一块栈空间,栈空间存的就是数值本身,
引用数据类型:有两块空间一块栈空间存储堆空间的引用ID另一块堆空间存储真正的数据
数组的定义:
1.构造方法:
var arr1 = new Array(1,2,3,4,5);
console.log(arr1);
new是在堆上开辟空间
2.字面量:
var arr2 = [1,2,3,4,5];//编译器隐式的会new空间,引用类型必须new
console.log(arr2);
数组元素的访问:数组名【下标】;
下标都是连续的自然数
下标可以为变量
var arr = [6,5,7,4,8];
var n = 3;
arr[n] = 999;
console.log(arr[n]);
//越界访问
console.log(arr[123]);
数组遍历:对数组的所有元素执行某种相同的操作
length:数组当前的长度//console.log(arr.length);
var arr = [4,5,6,7,3,8,9,0];
for(var i=0; i<arr.length; i++){
console.log(arr[i]);
}
API学习方法:
1.了解功能
2.参数
3.返回值
4.Demo
//push
//功能:尾插一个或多个元素
//参数:push(x1,[x2,...xN])
//返回值:新数组的长度
var arr = [1,2,3];
var len = arr.push(666,555);
console.log(len,arr);
//------------------------------------
//pop
//功能:尾删
//参数:无
//返回值:被删除的元素
var arr = [1,2,3];
var x = arr.pop();
console.log(x,arr);
//------------------------------------
//unshift
// 功能:头插一个或多个元素,
// 参数:unshift(x1,[x2...xN]);
// 返回值:新数组的长度
var arr = [1,2,3];
var len = arr.unshift(666);
console.log(len,arr);
//------------------------------------
//shift
//功能:头删
//参数:无
//返回值:被删除的元素
var arr = [1,2,3];
var x = arr.shift();
console.log(x,arr);
arr.push(7,6);
arr.unshift(888,999);
arr.pop();//888 999 23 7
console.log(arr);
//------------------------------------
//reverse
//功能:逆序
//参数:无
//返回值:无
//说明:该函数会改变你原数组
var arr = [6,5,4,7,3,8,9,2,0,1];
arr.reverse();
console.log(arr);
//------------------------------------
//splice
//功能:数组元素的删除或添加,
//参数:splice(起始位置,偏移量,[添加的新元素])
//返回值:被删除的元素
var arr = [4,5,6,7,3,8,9,2];
var arr1 = arr.splice(1,3,"heihei","haha");
console.log(arr1,arr);
//------------------------------------
// slice
// 功能:数组的截取函数,
// 参数:slice(起始位置,结束位置);
// 返回值:返回值[起始位置,结束位置)的元素
var arr = [4,5,6,7,3,8,9,2];
var arr1 = arr.slice(1,3);
console.log(arr1,arr);
//------------------------------------
//join
//功能:将数组转换为字符串
//参数:join([分隔符]),默认为逗号
//返回值:通过分割符号组成的字符串
var arr = [5,6,7,4,8];
var str = arr.join("凢凢");
console.log(str);
//------------------------------------
//concat
//功能:数组的拼接
//参数:concat(arrN);
//返回值:被拼接的数组
//说明:元素组不会发生改变
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = arr1.concat(arr2);
console.log(arr3,arr1,arr2);
//------------------------------------
//扩展
//sort
//功能:排序,默认由小至大进行排序
//参数:sort(回调函数)
//返回值:返回数组本身
var arr = [6,5,7,4,8,3,9,2,0,11];
console.log(arr.sort());
多维数组是通过一维数组的嵌套实现的
冒泡排序:核心算法 趟数:N-1
每趟两两比较的次数:N-i-1
var t = 0;
for(var i=0; i<arr.length-1; i++){
for(var j=0; j<arr.length-i-1; j++){
if(arr[j]<arr[j+1]){
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
console.log(arr);