(四)JavaScript 立即执行的函数表达式(IIFE)

本文介绍了 JavaScript 中圆括号作为函数执行符号的用法,阐述了定义函数后立即执行产生语法错误的原因,即关键字解析歧义。给出解决办法,如将函数放在圆括号里。还说明了立即执行函数表达式的目的,包括避免污染全局变量和封装私有变量。

在 Javascript 中,圆括号()是一种运算符,跟在函数名之后,表示调用该函数。()是函数的执行符号。比如,test()就表示执行test函数。
我们需要在定义函数之后,立即执行该函数。这时,你不能在函数的定义之后加上圆括号,这会产生语法错误。

function(){ /* code */ }();
// SyntaxError: Unexpected token (

产生这个错误的原因是,function这个关键字即可以当作声明语句,也可以当作表达式。

函数声明:function fnName(){ /* code */ }
函数表达式:var fnName = function() { /* code */ }

只有表达式才能够被执行。

为了避免解析上的歧义,JavaScript 引擎规定,如果function关键字出现在行首,一律解释成声明语句。因此,JavaScript引擎看到行首是function关键字之后,认为这一段都是函数的定义,不应该以圆括号结尾,所以就报错了。

解决方法就是不要让function出现在行首,让引擎将其理解成一个表达式。最简单的处理,就是将其放在一个圆括号里面。

官方写法:
(function (){}()); (W3C建议写法)
(function (){})();

最后的分号都是必须的。如果省略分号,遇到连着两个 IIFE,可能就会报错。

推而广之,任何让解释器以表达式来处理函数定义的方法,都能产生同样的效果,比如下面写法。

var i = function(){ /* code */ }();

!function () { /* code */ }();

~function () { /* code */ }();

-function () { /* code */ }();

+function () { /* code */ }();

通常情况下,只对匿名函数使用这种立即执行的函数表达式,因为执行过后即释放该函数的引用,如下

function a(){ }
!function b(){ }();

console.log(a); //function a(){ }
console.log(b); //报错:b is not defined

立即执行的函数表达式目的有两个:
一 是不必为函数命名,避免了污染全局变量;
二 是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

摘自:https://wangdoc.com/javascript/types/function.html(阮一峰)

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值