匿名函数,自执行函数的相关问题

本文深入解析JavaScript中匿名函数的创建与使用,对比函数声明与表达式的区别,阐述自执行匿名函数的工作原理,以及如何将函数转换为表达式。

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

最近在看前段的东西,刚好看到了这一块,觉得可能会有些人在这里有点小疑问,因为我也是带着疑问仔细研究了一下~

首先要说一些js预编译

特点:js在"预编译"阶段, 会解释函数声明, 但却会忽略表式。

匿名函数的创建

第一种方式:

var seu= function(a) { return 23* a; }
上面表达式右边的函数就是一个匿名函数,创造完毕函数后,又将该函数赋给了变量。

第二种方式:

(function(a, b){ 
alert(a + b); 
})(22, 23);

这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行.

自执行的匿名函数

1. 什么是自执行的匿名函数?

它是指形如这样的函数: (function {  code })();

2. 疑问

为什么(function {// code})();可以被执行, 而function {// code}();却会报错?

(1). 首先, 要清楚两者的区别:
(function {// code})是表达式, function {// code}是函数声明.

(2). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.

所以我们要做的就是把函数转换为表达式‘’‘’‘’

函数转换为表达式

我们知道,在js中将函数声明表达式转换为函数表达式,只需要在函数声明前面加上 +,-,=,~ 或 ! 等运算符或者()抱起来就行了。

另外,也可以用void操作符进行转换,举个简单的例子:

void function(){console.log(1)}();  //1
void function(g){console.log(g)}(this);  //window

void在项目开发中还有两个比较常用的地方:

1.通过 void 0;取到真正的undefined

2.将a元素的href属性设置成javascript:void 0;来阻止页面跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值