前端封闭函数使用~ + -运算符的副作用

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

1

2

3

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

//或

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

而也有人这样写:

1

2

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

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

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

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

1

function(){alert(1)}()

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

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

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

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

1

2

3

4

!function() {return 1}()//false

~function() {return 1}()//-2

-function() {return false}()//0

-function() {return false}()//0

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值