深入浅析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实现控制内容的向上向下滚动效果
Jun 26 Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
浅谈JavaScript浅拷贝和深拷贝
Nov 07 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
简单的分页代码js实现
2016/05/17 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
js实现图片360度旋转
2017/01/22 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
自荐信写法介绍
2014/01/25 职场文书
校庆筹备方案
2014/03/30 职场文书
给孩子的新年寄语
2014/04/08 职场文书
清明节演讲稿
2014/05/27 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技