JavaScript 函数
函数的声明
1. 函数声明
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。function text(){ /*函数体*/ }
2. 命名函数表达式
var text = function abc(){ /*函数体*/ }
这种方式有点像定义变量。
3. 匿名函数表达式, 因为这个比较常用,所以干脆直接叫做函数表达式。
var text = function(){ /*函数体*/ }
这种方式由第2种方式衍生出来的匿名表达式。
那这第二种方式和第三种方式有什么区别呢?
var text = function abc(){ /*函数体*/ }
这种叫做表达式,表达式是忽略名字的,所以在访问函数的时候,只能通过text来访问,不能通过abc来访问函数。function abc(){ /*函数体*/ } 这一部分充当了表达式,就不能充当一个函数体了。
但是呢,用第2种方式定义的函数,访问text.name 得到的结果是"abc"。而第三种方式定义的函数,访问text.name得到的结果就是"text"。此外,第一种定义方式访问text.name的结果也是text。
函数的参数。
function text(a, b){ //var a;
//var b; }
这样就相当于隐式在函数体里面定义了两个变量a,和b;在调用的时候text(1, 2)就相当于给函数体里面的a和b分别赋值1,2。此时,我们将函数定义的时候的a,b叫做形式参数,简称形参。
因为在函数调用之前,他没有实际作用,只是一个形式。而在调用的地方text(1, 2)中的1,和2叫做实际参数,简称实参。
特别的,在JavaScrip的函数中,形参和实参的个数可以不相等。对于上诉程序,我通过text(1, 2, 3)调用函数,这时候a,和b分别赋值1,2。而3没地方传,就拉到。如果实参少,形参多
那么就将没有实参对应的形参赋值为undefined。
其实,在每一个函数里面,都有一个隐式的东西,叫做arguments,这是一个类似于数组的数组,这个数组叫做实参列表。无论形参有没有接受完实参,这个数组都会把所有的实参保存起来。比
如text(1, 2, 3)调用函数,函数里面的arguments数组里面的结果就是[1, 2, 3]。同样可以访问到3。在这个数组里面,可以通过arguments.length访问实参的长度,同时,也可以通
过text.length来访问形参的长度。
疑问:我们说arguments里面存的是实参的值,但是a,b里面也是存这实参的值啊。那形参a和b跟arguments指向的是同一个地方吗?
function test(a, b){ a = 2; console.log(a); } /*通过text(1, 0);调用函数,得到的结果是2*/
function test(a, b){ a = 2;
arguments[0] = 3 console.log(a); }
/*这时候的结果就是3*/
经过上诉实验,似乎是说,形参a,b和arguments指向的是同一个地方,但其实不是。在我的印象中,只有引用值才能指向同一个地方,但是,这里形参a和b不是引用值。
之所以改变其中的一个,另外一个跟这变,那是因为它们之间存在着一种映射规则。只要改变其中的一个,另外一个也会跟着变。
返回值
一般来说,函数都是有return语句的。就算自己没有写,程序也会自动在后面加上一句。

更多精彩