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 相关文章推荐
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
在Firefox下js select标签点击无法弹出
Mar 06 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
Sep 08 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
jQuery事件委托代码实践详解
Jun 21 jQuery
详解JS WebSocket断开原因和心跳机制
May 07 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实现网站验证码功能【推荐】
2017/02/09 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
JQuery优缺点分析说明
2011/04/10 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python执行get提交的方法
2015/04/29 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Python编写单元测试代码实例
2020/09/10 Python
毕业生教师求职信
2013/10/20 职场文书
任课老师推荐信范文
2013/11/24 职场文书
团委竞选演讲稿
2014/04/24 职场文书
给学校建议书范文
2014/05/13 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers