深入浅析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 相关文章推荐
关于jQuery的inArray 方法介绍
Oct 08 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
基于jQuery中对数组进行操作的方法
Apr 16 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
elementUI Tree 树形控件的官方使用文档
Apr 25 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 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 和 HTML
2006/10/09 PHP
通过文字传递创建的图形按钮
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
一个PHP分页类的代码
2011/05/18 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python套接字流重定向实例汇总
2016/03/03 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
介绍一下linux的文件权限
2012/02/15 面试题
业务员岗位职责
2013/11/16 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
房屋出售协议书
2014/04/10 职场文书
就业协议书怎么填
2014/04/11 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
环境科学专业求职信
2014/08/04 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫