深入浅析JavaScript函数前面的加号和叹号


Posted in Javascript onJuly 09, 2016
+function(){}();

这里的加号,也可以替换成!,~等其他一元操作符,其效果相当于:

(function() { console.log("Foo!"); })(); 
// or 
(function() { console.log("Foo!"); }());

如果没有这个加号的话,解析器会认为function是一个函数声明的开始,而后面()将会导致语法错误。在function前面加上+号时,就变成了一个函数表达式,而函数表达式后面又添加了一个()就变成了一个立即执行的函数了。

下面看下js函数前面感叹号的作用:

一、JS函数声明形式

function fnA(){alert('msg');} //声明式定义函数

二、JS函数表达式形式

var func = function(agr1,arg2){ //创建匿名函数
alert(arg1 + ' ' + arg2);
}

三、JS匿名函数声明完立即执行的常见格式

(function() { /* code */ })();

说明

1、包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。

2、使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。

3、该函数的作用主要为 匿名 和 自动执行

Javascript 相关文章推荐
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
JavaScript中数组Array.sort()排序方法详解
Mar 01 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
Vue创建头部组件示例代码详解
Oct 23 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
jQuery回到顶部的代码
Jul 09 #Javascript
jQuery 跨域访问解决原理案例详解
Jul 09 #Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 #Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
Jul 09 #Javascript
jquery+ajax+text文本框实现智能提示完整实例
Jul 09 #Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
Jul 09 #Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 #Javascript
You might like
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
js的2种继承方式详解
2014/03/04 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python中IPYTHON入门实例
2015/05/11 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
Python: 传递列表副本方式
2019/12/19 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
如何基于python操作excel并获取内容
2019/12/24 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
新店开张活动方案
2014/08/24 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
文体活动总结
2015/02/04 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
婚礼答谢词范文
2015/09/29 职场文书