Preface
在改祖传代码的时候,我发现代码中有的地方,在函数表达式前面加了一个!
。其实这个!
就是让这个函数变成了自执行函数表达式,从函数声明转换成了函数表达式。
比如我们有这样一个函数
1 | function() {console.log('1111');} |
这是一个函数声明,函数是不能执行的。除非将该函数赋值为一个表达式,函数表达式是可以执行的。
1 | let a = function() {console.log('1111');} |
除了上面那样执行,我们还可以写成如下这样的自执行函数表达式
1 | (function() {console.log('1111')}()); |
其实!
或者前函数前面加一个一元运算符,也是讲一个函数声明转为成一个函数表达式
1 | !function() {console.log('1111');} |
回到文章开头提到的问题,我看到的祖传代码如下
1 | +function() {console.log('1111');}() |
function() {console.log('1111');}
是一个函数声明,前面加上+
,就成了一个表达式。后面再加上一个()
,就成了立即执行函数。