深入浅析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 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
node.js中的buffer.length方法使用说明
Dec 14 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
Mar 30 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
Oct 15 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
layui use 定义js外部引用函数的方法
Sep 26 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
Feb 05 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 Javascript
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
几个学习PHP的网址
2006/11/25 PHP
将php数组输出html表格的方法
2014/02/24 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
javascript一点特殊用法
2008/05/28 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
javascript实现放大镜功能
2020/12/09 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
python操作链表的示例代码
2020/09/27 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
挂职思想汇报
2013/12/31 职场文书
学生感冒英文请假条
2014/02/04 职场文书
我的求职择业计划书
2014/04/04 职场文书
计生工作先进事迹
2014/08/15 职场文书
水电工程师岗位职责
2015/02/13 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
党员干部学习心得体会
2016/01/23 职场文书