arguments对象
使用arguments对象可以获取传入的每个参数的值
arguments对象可以当做数组使用,但它是一个伪数组
例子:计算n个数字的和
function fi(){ var sum=0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } return sum; }
函数的其他定义方式
命名函数:函数如果有名字,就是命名函数
匿名函数:函数如果没有名字,就是匿名函数
函数的另外一种定义方式
函数表达式:把一个函数给一个变量,此时形成了函数表达式
var 变量=匿名函数;
例子:
var f1=function(){ };
如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是
一个函数,就可以直接加小括号调用了
f1();
注意:函数表达式后面,赋值结束后,要加分号
函数的自调用--->没有名字;调用--->声明的同时,直接调用
函数的自调用是一次性的
(function(){ console.log(“擦汗”)})();
(function(){ console.log(“佳丽斯”)})();
函数也是一种数据类型。
函数是有数据类型的,数据类型是:function类型
函数作为参数使用;如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数。
只要看到函数作为参数使用,那就是回调函数。
函数可以作为返回值使用。
作用域
指的是:使用范围
分为全局变量和局部变量
全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用。
除了函数以外,其他的任何位置定义的变量都是全局变量。
全局变量如果页面不关闭,那么就不会释放,就会占空间,消耗内存。
局部变量:在函数内部定义的变量,是局部变量,外面不能使用
全局作用域:全局变量的使用范围。
局部作用域:局部变量的使用范围。
块级作用域:一堆大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中,这个块级作用域中定义的变量,外面也能使用。说明:
JS没有块级作用域,只有函数除外
拓展:
隐式全局变量:声明的变量没有var,就叫隐式全局变量
全局变量是不能被删除的,隐式全局变量是可以被删除的。
定义变量使用var是不会被删除的,没有var是可以删除的
作用域链
使用的变量应当在当前的作用域找,找不到再去上一级找。
这一整个形成的关系,就叫作用域链。
预解析
预解析:指的是在当前作用域下,js运行之前,会把带有var和function关键字事先声明,并在内存中安排好。然后再从上到下执行js语句。
预解析只会发生在通过var定义的变量和function上。
预解析就是提前解析代码
预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面。
函数中的变量只会提前到函数的作用域中的最前面,不会出去
预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)