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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
JQuery中attr方法和removeAttr方法用法实例
May 18 Javascript
js操作cookie保存浏览记录的方法
Dec 25 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
JavaScript基础之this详解
Jun 04 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
微信小程序实现带放大效果的轮播图
May 26 Javascript
原生js+canvas实现下雪效果
Aug 02 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
Parse正式发布开源PHP SDK
2014/08/11 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
新浪的图片新闻效果
2007/01/13 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
python访问纯真IP数据库的代码
2011/05/19 Python
python类和继承用法实例
2015/07/07 Python
对python中的pop函数和append函数详解
2018/05/04 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
新学期班主任寄语
2014/01/18 职场文书
洗手间标语
2014/06/23 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
写景作文评语集锦
2014/12/25 职场文书
监守自盗观后感
2015/06/10 职场文书
教育教学工作反思
2016/02/24 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python