深入浅析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 相关文章推荐
javascript中创建对象的三种常用方法
Dec 30 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
深入理解javascript中defer的作用
Dec 11 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
老生常谈angularjs中的$state.go
Apr 24 Javascript
element上传组件循环引用及简单时间倒计时的实现
Oct 01 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 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
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
python实现决策树分类(2)
2018/08/30 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
班干部演讲稿
2014/04/24 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
暑期社会实践证明书
2014/11/17 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
海底两万里读书笔记
2015/06/26 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers