深入浅析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 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
jQuery中:button选择器用法实例
Jan 04 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
JS扩展方法实例分析
Apr 15 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
JavaScript中var、let、const区别浅析
Jun 24 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 Javascript
深入理解javascript中的this
Feb 08 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
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php字符串分割函数用法实例
2015/03/17 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
PHP反射基础知识回顾
2020/09/10 PHP
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
详解Python的单元测试
2015/04/28 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python如何对实例属性进行类型检查
2018/03/20 Python
Python使用OpenCV进行标定
2018/05/08 Python
django输出html内容的实例
2018/05/27 Python
详解Python sys.argv使用方法
2019/05/10 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
比驿:全球酒店比价网
2018/06/20 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
法律专业实习鉴定
2013/12/22 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android