JavaScript第二周学习
函数
定义:由时间驱动或当它被调用时执行的可重复使用的代码块。
function fn(a,b){
语句
}
fn(1,2)
其中fn(a,b)是指形式参数---定义时出现;
fn(1,2)是实际参数---定义时出现。
匿名函数
var a=function---指声明(必须)
(function(){
alert("立即调用")
}());
或者
(function(){
alert("立即调用")
})();
小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
闭包
闭包是指某种程序语言中的代码块允许一级函数存在并且在一级函数中所定义的自由变量能不被释放,直到一级函数被释放前,一级函数外也能应用这些未释放的自由变量。
让我们换个更加简单的方法说明:闭包,其实是一种语言特性,它是指的是程序设计语言中,允许将函数看作对象,然后能像在对象中的操作搬在函数中定义实例(局部)变量,而这些变量能在函数中保存到函数的实例对象销毁为止,其它代码块能通过某种方式获取这些实例(局部)变量的值并进行应用扩展。
闭包,其实就是指程序语言中能让代码调用已运行的函数中所定义的局部变量。
关于全局变量和局部变量
局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。
!!!未声明的变量,会升级为全局变量。
参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。
传递方式JavaScript的函数参数传递方式是传值传递,这意味着,在函数体内修改参数值,不会影响到函数外部。
虽然参数本身是传值传递,但是对于复合类型的变量来说,属性值是传址传递,也就是说,属性值是通过地址读取的。所以在函数体内修改复合类型变量的属性值,会影响到函数外部。
arguments对象:由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,依次类推。这个对象只有在函数体内部,才可以使用。可以通过arguments对象的length属性,判断函数调用时到底带几个参数。