JS

JS函数前面加!、+、-、~符号以及;的作用

笔记

Posted by Wason on November 1, 2019

JS函数前面加!、+、-、~符号以及;的作用

知识点:

  1. function(){}外还可增加以下内容,它们都是实现 function立即调用/执行的作用
    (function () { /* code */ }) ( ); // 直接调用
    (function () { /* code */ } ( )); // 强制执行
    !function () { /* code */ } ( );
    ~function () { /* code */ } ( );
    -function () { /* code */ } ( );
    +function () { /* code */ } ( );
    
  2. 包围函数概念,函数(function(){})( )的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。

  3. ()、!、+、-、~这些符号写在函数前代表不同的含义,还是有些会对function的返回值做出操作
① ( ) 没什么实际意义,不操作返回值
② ! 对返回值的真假取反
③ +、- 是对返回值进行数学运算 ( 可见返回值不是数字类型的时候 +、- 会将返回值进行强制转换,字符串强制转换后为NaN)
④ ~ 对返回值进行按位取反(所有正整数的按位取反是其本身+1的负数,所有负整数的按位取反是其本身+1的绝对值,零的按位取反是 -1。其中,按位取反也会对返回值进行强制转换,将字符串5转化为数字5,然后再按位取反。
false被转化为0,ture会被转化为1。
其他非数字或不能转化为数字类型的返回值,统一当做0处理)
  1. function(){} 后面要加()!!!
    var fn2 = function(){}(); //对,就是这样
    function fn1(){}(); //会被忽略
    (function fn1(){}) (); // 平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,也可以加上面的!、+、-、~
    
  2. 分号 ; 的含义 function前写 ; 是为了防止代码压缩时,前面代码没写 ; 造成报错。

结合上面所说的 JS 函数的这些符号定义,还可以再拓展说下对JS 闭包的理解。这个留到下一期。

参考网文

JS中(function(){xxx})(); 这种写法是什么意思
js中(function(){})()的写法用处
这篇文章算是描述比较全面的