深入浅析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 相关文章推荐
使用js获取QueryString的方法小结
Feb 28 Javascript
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
jQuery插件实现静态HTML验证码校验
Nov 06 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
js实现canvas图片与img图片的相互转换的示例
Aug 31 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 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
URL Rewrite的设置方法
2007/01/02 PHP
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
PHP编写RESTful接口
2016/02/23 PHP
sina的lightbox效果。
2007/01/09 Javascript
javascript事件问题
2009/09/05 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python set集合类型操作总结
2014/11/07 Python
Python运用于数据分析的简单教程
2015/03/27 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Django REST framework 视图和路由详解
2019/07/19 Python
python实现mean-shift聚类算法
2020/06/10 Python
python要安装在哪个盘
2020/06/15 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
公司市场部岗位职责
2013/12/02 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
感恩节活动策划方案
2014/05/16 职场文书
高中历史教学反思
2016/02/19 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL