博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名函数function前面的! ~等符号作用小解
阅读量:5750 次
发布时间:2019-06-18

本文共 1053 字,大约阅读时间需要 3 分钟。

好久没写博客了,刚过完年,给大家拜个晚年,大家新年快乐!

相信昨晚前端,很多同学应该都见过类似于:

!function() {do something...}()~function(){do something...}()

等这样的匿名函数写法!

当然对于老同志来说,肯定是明白这样写法的作用了,但是对于新手来说可能会有一定的困扰,这里就简单给大家分享一下关于这种写法的作用,以及原理!

众所周知,在js中可以这样创建一个匿名函数:

(function(){do something...})()//或(function(){do something...}())

而匿名函数后面的小括号()是为了让匿名函数立即执行,其实就是一个函数调用,相信大家都懂的!

那大家有没有想过为什么这么写就会报错了:

function(){alert(1)}()

其实很简单,因为function前面没有(或者! ~之类的运算符,js解析器会试图将关键字function解析成函数声明语句,而不是函数定义表达式!

作为组运算符,小括号()会将其内部的表达式当成一个整体,然后返回结果,所以定义一个匿名函数正确的格式就是用小括号将函数体括起来!

同样的! ~ + -等运算符也有同样的效果,这是因为匿名函数也是一种值,这些运算符会将后面的函数体当成一个整体,先对匿名函数进行求值,然后在对结果进行运算!

不过这些运算符虽然能够达到让匿名函数立即执行的目的,但是要小心他们是有副作用的,比如:

!function() {return 1}()//false~function() {return 1}()//-2-function() {return false}()//0-function() {return false}()//0

没错,他们会对函数的返回值进行运算,这样可能会导致最终的结果和你想要的结果不一样!当然,对于那些没有返回值的函数来说,当然是没有什么影响了!

既然上面都说了可能会有副作用,那为什么还有这么多人用了?

其实答案很简单,无外乎两点:

1.让代码看起来不容易懂,说白了就是装~比~

2.少写一个),偷懒呗!

当然一般这么用的时候都是函数本身没有返回值的情况!(还有可能会有一些特殊的需求啦),为了代码可读性,本人建议还是按照正规的方式使用匿名函数,没有特殊需求的情况下尽量不用这些运算符代替小括号!

转载于:https://www.cnblogs.com/xjser/p/5210697.html

你可能感兴趣的文章
函数 多文件[转]
查看>>
openstack kilo 配置dvr
查看>>
Ethernet/802.3网络的设计考虑因素
查看>>
HTML文档基本格式
查看>>
在Asterisk 1.6 上安装TE110P
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
zynq qemu学习
查看>>
我的友情链接
查看>>
博科SAN交换机:常用命令行
查看>>
nginx实现动静分离负载均衡集群
查看>>
无向图的割边、割点
查看>>
nginx配置https网站
查看>>
数星星
查看>>
linux开机自动加载分区/etc/fstab配置文件
查看>>
利用KVC的方式更方便地获取数组中对象的属性的最值平均值等
查看>>
mysql用SQLyog导入数据时报错(文件太大)
查看>>
图解SQL的inner join、left join、right join、full outer join、union、union all的区别
查看>>
【安装zabbix3.4之1-Nginx安装】CentOS7安装Nginx及配置
查看>>
实现网站由http协议转为https协议
查看>>