深入浅析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下string.format函数补充
Aug 24 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
javascript实现动态改变层大小的方法
May 14 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
理解javascript封装
Feb 23 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
详解http访问解析流程原理
Oct 18 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
Apr 04 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 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代码
2010/08/08 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
js实现文字滚动效果
2016/03/03 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python自动发送邮件脚本
2018/06/20 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
公务员培训自我鉴定
2013/09/19 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
考试不及格的检讨书
2014/01/22 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
小学优秀学生评语
2014/12/29 职场文书
授权委托书
2015/01/28 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
php修改word的实例方法
2021/11/17 PHP
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers