【JavaScript 学习--12】--js 中两种函数定义的区别:函数声明和函数表达式

本文深入探讨JavaScript中的函数定义方式,包括函数声明与函数表达式的区别。解析了函数声明提升的概念,以及不同定义方式如何影响代码执行。通过示例说明了何时使用何种方式更合适。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在JS里面的函数实际上是对象,每个函数都是Function类型的实例,而且都与其它引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上是指向函数对象的指针, 不会与某个函数绑定。函数的定义有两种方式:函数声明和函数表达式。下面我们就对这两种方法进行总结。

二者最重要的区别是:函数声明会在程序预加载读取,加入到全部变量window里面,因而函数声明放在任何位置都可以。

一句话可以概括为:函数是对象,函数名是指针。

函数声明 和函数表达式 定义

//函数声明
function sum(num1, num2) {
    return num1 + num2;
}

//函数表达式
var sum = function(num1, num2) {
    return num1 + num2;
};

以上第二种方式(函数表达式)定义了变量sum并将其初始化为一个函数。注意该函数末尾有一个分号,就像声明其它变量一样。

所以由于函数名是指针,因此函数名与包含对象指针的其它变量没有什么不同。换句话说,一个函数可能会有多个名字。
例如:

function sum(num1, num2) {
    return num1 + num2;
}

alert(sum(10, 20)); // 30

var Fsum = sum;
alert(Fsum(10, 20)); // 30

var sum = null;
alert(Fsum(10, 20)); // 30

函数声明 和函数表达式 区别

实际上,JS解析器在向执行环境加载数据时,对函数声明和函数表达式并非一视同仁。解析器会预先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。所以请看下面例子:

alert(sum(10, 20)); // 30
function sum(num1, num2) {
    return num1 + num2;
}

以上代码完全可以正常运行,结果会为30。因为在代码执行之前,解析器就已经通过名为函数声明提升的过程,读取并将函数声明添加到执行环境了。对代码求值时,JS引擎在在预加载时就把声明函数放到源代码树的顶端了。所以,即使声明函数在调用它的代码后面,JS引擎也能把它提升到顶部。如果改成等价的函数表达式,就会在执行期间报错。

alert(sum(10, 20)); // unexpected identifier
var sum = function(num1, num2) {
    return num1 + num2;
}

以上代码会在运行期间产生错误,原因在于在执行到函数所在的语句之前,变量sum中不会保存对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上不会执行到下一行代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木瓜~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值