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 相关文章推荐
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
Apr 12 Javascript
jquery uaMatch源代码
Feb 14 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
javascript实现下拉提示选择框
Dec 29 Javascript
浅析jQuery 3.0中的Data
Jun 14 Javascript
Google 地图事件实例讲解
Aug 06 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 Javascript
js 函数性能比较方法
Aug 24 Javascript
Vue中父子组件的值传递与方法传递
Sep 28 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
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格式数据的方法
2016/03/04 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python3的输入方式及多组输入方法
2018/10/17 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
优秀老师事迹材料
2014/02/05 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
促销活动总结报告
2014/04/26 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书