文档章节

js函数的非常规调用方式

码上有春天
 码上有春天
发布于 2015/04/23 11:32
字数 320
阅读 122
收藏 1

我们都知道,函数的声明方式有这两种

function fnA(){alert('msg');}//声明式定义函数
var fnB = function(){alert('msg');}//函数赋值表达式定义函数

通常,我们调用一个方法的方式就是 FunctionName()

但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

function msg(){
  alert('message');
}();//解析器是无法理解的

var fnB = function(){alert('message');}()//弹出'message'

定义函数的调用方式应该是 msg() ; 那为什么将函数体部分用()包裹起来就可以了呢?

原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 ~ + - || void等都有这样的功能。

//void也是运算符,对任何值都返回undefined;
//void后可以加括号也可以不加
void function msg(){
  alert('message');
}();//弹出'message'

void (function msg(){
  alert('message');
}());//弹出'message'

另外,用 ! 可能更多的是一个习惯问题(比双括号省略一个字符),不同的运算符,性能是不同的。


© 著作权归作者所有

码上有春天
粉丝 5
博文 82
码字总数 55985
作品 0
广州
程序员
私信 提问
react设计--他怎么知道是类组件还是函数组件

原文: how-does-react-tell-a-class-from-a-function 译文原文: react是如何知道组件是不是类组件 考虑这个定义为函数的组件: 同样支持作为一个类去定义它: (直到最近,这是使用状态等功能的...

大灰狼的小绵羊哥哥
2018/12/05
0
0
简析JavaScript中的Function类型(一)——函数名是指针

说起来ECMAScript中什么最有意思,用原书(《JavaScript高级程序设计》)作者的话说——莫过于函数了,有意思的根源在于函数实际上是对象。每个函数都是类型的实例,而且都与其他引用类型一样...

Bob2100
03/02
8
0
《JavaScript权威指南》笔记(二)

第二篇笔记的内容主要涉及:数据类型转换,函数、对象、数组的创建以及null与undefined的比较。 1. javascript中类型转换的方法: (1)数字-->字符串: number+" "; String(number); number...

小微
2012/08/28
435
7
简析JavaScript中的this关键字

本文为译文,文章有点长,但是仔细通篇阅读下来,关于的识别问题基本就搞定了。由于译者水平有限,文中有纰漏之处,还请读者多多指正。下面看正文吧: 1. 谜之this 在很长一段时间内,关键字...

Bob2100
02/24
20
0
react怎么知道是类组件还是函数组件

原文: how-does-react-tell-a-class-from-a-function 译文原文: react是如何知道组件是不是类组件 考虑这个定义为函数的组件: 同样支持作为一个类去定义它: (直到最近,这是使用状态等功能的...

xiaohesong
2018/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

当阿里云工程师回到了家乡......

根据真实故事改编 略有浮夸 但重要的是 9月25日13:30-16:30 云栖大会「5G边缘计算专场」 一定要来哦 !!! 本文作者:樰篱 原文链接 本文为云栖社区原创内容,未经允许不得转载。...

Mr_zebra
3分钟前
1
0
文件操作工具类 FileUtils常用方法

文件操作工具类(FileUtils) 使用该工具类的前提是项目里导入commons-io 包 import org.apache.commons.io.FileUtils; List<String> lines=new ArrayList<String>(); lines.add("欢迎访问:......

AndLong
10分钟前
1
0
maven-shade-plugin

最近,用规则引擎(drools)的封装了一个jar包,给别人使用。用的是maven-assembly-plugin打的包,可以把多个jar包里的class 给打成一个jar,感觉还是满好用的,但是打包成功后,发现报空指针错...

internetafei
14分钟前
1
0
Cassandra repair 工具使用

前言 Cassandra是一款去中心化的分布式数据库。一份数据会分布在多个对等的节点上,即有多个副本。我们需要定期的对多个副本检查,看是否有不一致的情况。比如因为磁盘损坏,可能会导致副本丢...

阿里云官方博客
17分钟前
1
0
element-vue使用富文本编辑器【前端】

一、前言 1.富文本编辑器选择的为vue-quill-editor 官方地址:https://quilljs.com/docs/quickstart/ 2.安装 cnpm install vue-quill-editor cnpm install quill 3.在对应的页面引入,在com...

一代码农码一代
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部