数组
数组就是若干数据组成的集合
创建数组
-1. var arr = new Array();
-2. var arr = [];
数组中的每一个数据都称为数组的元素
数组中自动对每一个元素都做了编号–索引值
所以我们可以通过索引值将指定数据取出来----索引值从0开始
eg: arr[2];
--如果编号不存在,得到的数据为undefined;
遍历数组
就是将数组中的所有元素逐个访问一遍
使用循环来做
for (var i = 0; i < arr.length; i++) {
arr[i];
} //顺序遍历
for (var i = arr.length - 1; i >= 0; i--) {
arr[i];
} // 倒序遍历
数组的长度
数组名.length
获取数组长度,数组长度就是数组中数据的个数
设置数组的长度
arr.length = 5;
如果设置的数值大于原数组的长度,就会有控位置;如果小于原数组的长度,会删除多余的元素;
arr.length = 0;
清空数组
可以使用 arr[arr.length] = 新数据
的方式为数组添加新元素;
函数
函数声明 语法:
function 函数名(形参1,形参2,...) {
函数操作;
} // 函数声明之后 内部的代码并不会执行 , 只有在调用函数时才会执行。
//调用函数 语法:
函数名(数据1,数据2,...);
函数的参数:函数声明时写在小括号里的是形参,相当于不用声明的变量,只在函数内部有效;
函数调用时写在小括号里的数据就是实参,相当于给形参赋值;
实参和形参的匹配问题:一对一按先后顺序进行赋值;如果实参多于形参,多出来的实参是无效的;如果形参多于实参,没接收到值的形参默认undefined;
函数的返回值
函数的返回值就是 函数调用语句 整体的值,在函数中使用return 值;
注意: return会结束整个函数,return后面的语句会不再执行;
return只能返回一个值,如果写了多个数据,会返回最后一个值;
如果return后面没有写值,或者没有写return 则返回值为undefined;
arguments
arguments中包括了所有传入的实参,arguments是一个伪数组,可以使用索引值来调用里面的实参;
arguments只能在函数中使用,虽然有数组的一些特性,但不是数组,所以称为伪数组;
作用域
概念:变量的有效范围;
全局作用域–整个页面有效;
局部作用域–只在函数内部有效,注意:只有在函数调用时,可以在全局作用域中划分出局部作用域;
变量可以根据作用域分为两类:全局变量和局部变量
在全局作用域中声明的变量和未声明就直接使用的变量称为–全局变量;
在局部作用域中声明的变量和函数的形参称为–局部变量;
作用域链
操作某个变量时,会从当前作用域向上层查找该变量;
如果到全局作用域中仍未有该变量,会有两种情况:
-1.如果是获取值的操作会报错;
-2.如果是赋值操作,会在全局作用域中默认声明了该变量,此变量就被设置为了全局变量;
预解析(声明提升)
js引擎在执行代码时,会把代码的声明部分提前执行–(var声明变量 和 function声明函数)
-1.变量提升:变量的初始化可以看作为两句代码——声明变量、给变量赋值;
变量提升就是将声明变量的操作提升到当前作用域的最前面;
-2.函数提升:把所有的function声明提升到当前作用域的最前面;
注意:
声明提升时,变量提升在函数提升的前面;在所有的作用域执行代码之前都会先进性预解析。
!!!
变量的声明放在赋值的后面和放在赋值之前的效果是一样的,因为在执行函数之前,js引擎会自动把声明操作放到最前面去。