全局变量:在定义变量的时候,没有被任何括号括起来的变量,作用域从变量定义开始到文件结束

优点:可以方便在页面之间传递数据,一开始定义后在整个文件里面都可以使用

缺点: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);