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 清除输入框中的数据
Apr 13 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
Javascript 遮罩层和加载效果代码
Aug 01 Javascript
js简单实现点击左右运动的方法
Apr 10 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
基于Javascript实现文件实时加载进度的方法
Oct 12 Javascript
有趣的bootstrap走动进度条
Dec 01 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
js封装成插件_Canvas统计图插件编写实例
Sep 12 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 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
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
看了就知道什么是JSON
2007/12/09 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
Python入门必须知道的11个知识点
2018/03/21 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
django的settings中设置中文支持的实现
2019/04/28 Python
python sorted函数的小练习及解答
2019/09/18 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python生成器用法实例详解
2019/11/22 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
应聘医药销售自荐书范文
2014/02/08 职场文书
初一新生军训方案
2014/05/22 职场文书
素质教育标语
2014/06/27 职场文书
教师见习报告范文
2014/11/03 职场文书
一个都不能少观后感
2015/06/04 职场文书
五一放假通知怎么写
2015/08/18 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Java基础-封装和继承
2021/07/02 Java/Android