js自执行函数的几种不同写法的比较


Posted in Javascript onAugust 16, 2012

经常需要一个函数自执行,可惜这一种写法是错的:

function(){alert(1);}();

原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从而让后面的“();”变得孤立,产生语法错。

按上面的分析,这一段代码虽说没有语法错,但也是不符合我们的预期的,因为这个函数并没有自执行。

function(){alert(1);}(1);

综上,症结在于,如何明确代码描述的是一个函数表达式,而不是函数声明语句。
正确的写法多种多样,也各有利弊:

方法1:最前最后加括号

(function(){alert(1);}());

这是jslint推荐的写法,好处是,能提醒阅读代码的人,这段代码是一个整体。
例如,在有语法高亮匹配功能的编辑器里,光标在第一个左括号后时,最后一个右括号也会高亮,看代码的人一眼就可以看到这个整体。
不过,对于某些写代码不喜欢在行后加分号的同学,也会形成一些坑坑,例如以下代码会报运行错:
var a=1 
(function(){alert(1);}());

方法2:function外面加括号

(function(){alert(1);})();

这种做法比方法1少了一个代码整体性的好处。

方法3:function前面加运算符,常见的是!与void 。

!function(){alert(1);}(); 
void function(){alert(2);}();

显然,加上“!”或“+”等运算符,写起来是最简单的。
加上“void ”要敲五下键盘,但是听说有一个好处是,比加"!"少一次逻辑运算。----我只是听说,不明所以。

最后,代表我个人,强烈支持方法1,即jslint的推荐写法:

(function(){alert(1);}());
Javascript 相关文章推荐
javascript编程起步(第六课)
Jan 10 Javascript
Jquery ui css framework
Jun 28 Javascript
JavaScript性能陷阱小结(附实例说明)
Dec 28 Javascript
微信小程序 教程之模板
Oct 18 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
Oct 25 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
通过webpack引入第三方库的方法
Jul 20 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
详解package.json版本号规则
Aug 01 Javascript
Vue如何获取数据列表展示
Dec 11 Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 Javascript
js三种排序算法分享
Aug 16 #Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 #Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 #Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 #Javascript
You might like
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
浅析is_writable的php实现
2013/06/18 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
Node.js中的child_process模块详解
2018/06/08 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
python中的多线程实例教程
2014/08/27 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Python装饰器用法实例分析
2019/01/14 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
机电一体化毕业生求职信
2013/11/02 职场文书
在校生自我鉴定
2014/01/23 职场文书
入党综合考察材料
2014/06/02 职场文书
先进个人材料怎么写
2014/12/30 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android