深入浅析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中typeof的使用示例
Dec 19 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
jQuery制作可自定义大小的拼图游戏
Mar 30 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
vue实现百度语音合成的实例讲解
Oct 14 Javascript
JS面向对象编程实现的Tab选项卡案例详解
Mar 03 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
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原生函数一定好吗?
2014/12/08 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
校园招聘策划书
2014/01/09 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
机关工会工作总结2015
2015/05/26 职场文书
朋友离别感言
2015/08/04 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL