JavaScript的函数表达式

JavaScript中定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。

函数声明

function functionName(arg0, arg1, arg2){
    //function body
}

首先是function关键字,然后是函数的名字,接着是函数的参数列表,然而在访问函数的时候,实际上仅仅匹配函数的名字,而不用匹配参数列表的,在函数内部,是使用arguments数组来存储参数的。

关于函数声明,它的一个重要特征就是函数声明提升(function declaration hoisting), 意思就是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放在函数调用的语句之后(但是不推荐这么做)。

sayHi();
function sayHi(){
    console.log("Hi!");
}

这个例子不会抛出错误,因为在代码执行之前会先读取函数声明。

函数表达式

函数表达式有几种不同的语法形式。
最常见的一种:

var functionName = function(arg0, arg1, arg2){
    //function body
};

这种形式是创建一个匿名函数(anonymous function),并将其赋值给变量functionName。匿名函数在关键字function后面没有标识符,也叫lambda表达式。

函数表达式与其他表达式一样,在使用之前必须先复制。以下代码会抛出错误。

sayHi();
var sayHi = function(){
    console.log("Hi!");
}

理解函数声明提升的关键,就是理解函数声明和函数表达式之间的区别。

函数可以被创建并赋值给变量,这个变量可以作为另一个函数的参数,也可以作为其他函数的返回值。这样的lambda表达式的特性使得JavaScript支持高阶函数和闭包。

高阶函数

在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

  1. 接受一个或多个函数作为输入
  2. 输出一个函数

闭包

官方”的解释是:
闭包,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

JavaScript的闭包需要结合其作用域链一起理解。简单来说:
闭包,就是有权访问另一个函数作用域中变量的函数。创建闭包的常见方式,就是在一个函数A内部创建函数B,这个函数B就是一个闭包,有权访问函数A的所有变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值