JS函数前面加!、+、-、~符号以及;的作用
知识点:
- function(){}外还可增加以下内容,它们都是实现 function立即调用/执行的作用
(function () { /* code */ }) ( ); // 直接调用 (function () { /* code */ } ( )); // 强制执行 !function () { /* code */ } ( ); ~function () { /* code */ } ( ); -function () { /* code */ } ( ); +function () { /* code */ } ( );
-
包围函数概念,函数(function(){})( )的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
- ()、!、+、-、~这些符号写在函数前代表不同的含义,还是有些会对function的返回值做出操作
① ( ) 没什么实际意义,不操作返回值
② ! 对返回值的真假取反
③ +、- 是对返回值进行数学运算 ( 可见返回值不是数字类型的时候 +、- 会将返回值进行强制转换,字符串强制转换后为NaN)
④ ~ 对返回值进行按位取反(所有正整数的按位取反是其本身+1的负数,所有负整数的按位取反是其本身+1的绝对值,零的按位取反是 -1。其中,按位取反也会对返回值进行强制转换,将字符串5转化为数字5,然后再按位取反。
false被转化为0,ture会被转化为1。
其他非数字或不能转化为数字类型的返回值,统一当做0处理)
- function(){} 后面要加
()
!!!var fn2 = function(){}(); //对,就是这样 function fn1(){}(); //会被忽略 (function fn1(){}) (); // 平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,也可以加上面的!、+、-、~
- 分号 ; 的含义 function前写 ; 是为了防止代码压缩时,前面代码没写 ; 造成报错。
结合上面所说的 JS 函数的这些符号定义,还可以再拓展说下对JS 闭包的理解。这个留到下一期。
参考网文
JS中(function(){xxx})(); 这种写法是什么意思
js中(function(){})()的写法用处
这篇文章算是描述比较全面的