JS的进阶上山打怪咯之函数(四)

函数表达式

语法:var funcName = fucntion(参数){ 代码 }
例子:

var sum = function (x, y){
return x + y;
}

示例中把一个匿名的函数赋值给变量sum,由于var定义了一个声明语句,对变量 sum 的解析是在代码运行之前,因此sum变量在代码运行时已经被定义过了。

函数声明和函数表达式

JavaScript解析器在向执行环境加载数据的时候,对函数声明和函数表达式并不是一视同仁的。 对于前者解析器会率先读取,并使其在执行任何代码之前可用;对于后者,则必须等到解析器执行 到它所在的代码行,才会真正被解析执行。
例子:

alert(sum(3,11)); //弹出14
function sum(x, y) {
return x + y;
}

可以理解为上述的函数声明定义函数转换为函数表达式定义函数:

然而,上述写法,第一行就会报错,可以这么理解,但是这样不符合语法
函数声明与函数表达式的语法区别在于:在不同的时间通过变量访问函数;

函数也可以作为值

JavaScript中的函数名本身就是变量,所以函数也可以作为值来使用;

function funcName(someFunc, someParam){
return someFunc(someParam)
}

这个函数接收两个函数。第一个参数是一个函数,第二个参数是要传递给该函数的一个值
Case:

函数调用

JavaScript函数在定义时并不会去执行,只有我们在调用定义的函数时,它才会去执行。
在JavaScript中有四种方式调用函数,如下:
1.方法调用模式;
2.函数调用模式;
3.构造器调用模式;
4.apply调用模式。

方法调用模式

当一个函数被保存为对象的一个属性时,我们称它为一个方法。如果调用表达式包含一个提取属性 的动作(即我们在讲解对象时说的 . 操作符),那么它就被当做一个方法来调用。

函数调用模式

函数调用模式即通常的函数调用,属于全局性调用。如下:

var add = function(a, b){
return a + b;
}
//函数调用模式
add(1,2); //=>3

上述代码等价:

function add(a, b){
return a + b;
}
add(1,2);//=>3

构造器调用模式

JavaScript中函数还可以是构造器. 将函数作为构造器来使用的语法就是在函数调用前面加上一个new关键字.

上述中的代码创建了一个构造函数add,然后使用构造函数创建对象obj。这里使用了new关键字。然后使用对象调用sum()方法。

apply调用模式

JavaScript中函数也是对象,也可以拥有方法。其中call()和apply()用来间接的调用函数。称之为apply调用模式。
apply方法让我们构建一个参数数组传递给调用函数。它也允许我们选择this的值。 apply方法接收两个参数,第一个是要绑定给this的值,第二个就是一个参数数组。
语法:函数名.apply(对象, 参数数组);
例子:

var add = function (a, b) {
return a + b;
}
add.apply(null,[1,2]); //=>3

call方法与apply方法类似,区别在call第二参数不是一个数组而是需要列举出来。

var add = function (a, b) {
return a + b;
}
add.call(null,1,2); //=>3

IT文库 » JS的进阶上山打怪咯之函数(四)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址