JS中的自执行函数

举报
sujrexia 发表于 2020/08/16 20:57:41 2020/08/16
【摘要】 在跟着JQuery学习建立自己的JS组件基础一文中,我们接触了自执行函数自执行函数IIFE,是 immediately invoked function expression 的首字母缩写,换另外一种说法就是立即执行函数。它可以避免变量污染和方法污染,在自定义组件时非常有用。怎样才算是自执行函数(function() { // todo })();如上,就是一个最基础的自执行函数其中...

跟着JQuery学习建立自己的JS组件基础一文中,我们接触了自执行函数

自执行函数IIFE,是 immediately invoked function expression 的首字母缩写,换另外一种说法就是立即执行函数。

它可以避免变量污染和方法污染,在自定义组件时非常有用。


怎样才算是自执行函数

(function() {    // todo })();

如上,就是一个最基础的自执行函数

其中()圆括号起了关键性作用,圆括号在js中有多种用途,如:

1. 运算优先级 (1+2) * 3

2. 函数声明 function foo(){}

3. 组成特定语句 if() while()等

4. 匿名函数的一种声明方式

在声明匿名函数时,可以有

var foo = function(){}

setTimeout(function(){}, 10);

(function(){})

自执行函数就是利用第四点实现了初始,然后通过后面紧跟(),调用它

(function(){})()

就类似下面的代码

function foo(){}; foo();

既然知道了,()的作用是声明,一元操作符也可以实现相同的效果,于是就有了

+function(){}();

-function(){}();

!function(){}();

~function(){}();

void function(){}();

等等方式,不过既然使用括号用的多,咋们就约定使用括号进行自执行函数声明,避免使用其他,这其中还有另外一个原因,就是一元操作符,会导致返回结果发生改变

如:-function(){ return 1}(); // 返回 -1

所以尽量避免其他的几种写法,当然遇到这种写法也就知道它是什么意义了,别被唬到了。。。


另外最后在建议一个,在匿名函数前,可以添加一个分号,避免组件在和其他代码压缩时,发生错误

; (function(){})();

比如,一段js代码:

var a它忘了写;,在有换行符时,运行没什么问题,当我们压缩之后就会变成 var a(function(){})();这样原来的语义就发生变化,或者发生语法解析错误了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。