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 相关文章推荐
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 Javascript
分享12个实用的jQuery代码片段
Mar 09 Javascript
修改ligerui 默认确认按钮的方法
Dec 27 Javascript
解析jquery easyui tree异步加载子节点问题
Mar 08 Javascript
AngularJS中$http使用的简单介绍
Mar 17 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
webpack之devtool详解
Feb 10 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 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初学者(入门学习经验谈)
2010/10/12 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
用Python编程实现语音控制电脑
2014/04/01 Python
Python制作Windows系统服务
2017/03/25 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
家具商场的活动方案
2014/08/16 职场文书
2014年大学生工作总结
2014/11/20 职场文书
护士医德考评自我评价
2015/03/03 职场文书
mysql sql常用语句大全
2022/06/21 MySQL