JavaScript深入浅出之函数

函数对于Javascript来说是重中之重,是Javascript的核心之一,同时跟其它编程语言不同之处之一。

函数的声明

Javascript中函数的声明有两种方式,函数声明和函数表达式。函数声明格式如下

function functionName(arg0, arg1, arg2 ......) {
    //函数主体
}

声明函数使用关键字function,后面是函数名和参数列表,函数表达戒指格式如下

var functionName = function (arg0, arg1, arg2......){
    //函数主体
}

这种形式看起来类似普通赋值语句,声明一个函数并赋值给一个变量,这种函数被称为匿名函数。函数表达式与函数声明最大区别就是函数声明提升,即在执行其它代码之前会先读取函数声明,在这种情况下可以将函数声明放于调用其语句之后,而函数表达式则必须等到解析器执行至其所在代码才会真正解析执行表达式语句。

参数

Javascript中的函数与其它编程不同之处之一就是参数。在其它编程语言如Java中,函数的名称相同,但参数数量、类型、顺序如果不同则表示不同的函数,但Javascript中对参数没有要求,如果有多个同名函数,则最后定义的函数会覆盖前面的,即没有函数重载这个概念。实际上,函数的参数是使用一个类数组对象arguments来表示的。

arguments对象
arguments对象并不是真正的数组对象,而是类数组对象,通过arguments[index]可以访问真正传给函数的实参,通过length属性可以访问对象大小,此外,它还有一个叫作callee的属性,此属性是一个指针,指向当前的函数本身。

call/apply方法
每个函数都有两个非继承而来的方法:apply和call方法。这两个方法功能相同,都是用于改变函数对应变量对象,实际上相当于修改函数内部的this指针。apply方法接收两个参数,第一个表示函数的作用域(即this对象),第二个参数为一个数组,存放的是参数;call方法与apply方法的区别在于参数必须逐个传递,比如下面的例子

//示例1
var name = "alex";
var obj = {"name" : "wilson"};
function printName() {
    alert(this.name);
}
printName.call(obj);    //winson
printName.call(window); //alex

//示例2
function getSum(num1, num2) {
    return num1 + num2;
}
getSum.apply(window, [10, 15]); //25
getSum.call(window, 10, 15);    //25

在例1中,运行printName.call(obj)时,printName函数内部的this指向了obj,即this.name == obj.name,所以结果为wilson;当运行printName.call(window)时,this又指向了window,即this.name == window.name。示例2 则演示了使用apply方法与call的区别。
使用这种方法来改变函数的作用域的最大优点是对象与方法之间没有耦合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值