( function ( ) { } ) ( ) ; var fn = function ( ) { } ( ) ; ( function myFn ( ) { } ) ( ) ; // 特殊直接调用(有强制执行的感觉) ( function ( ) { } ( ) ) ( function myFn ( ) { } ( ) )

原理:将函数用括号包括起来,解析器会把函数解析为函数表达式,而函数表达式可以直接调用。因此,其他能将函数体变成函数表达式的方法,都可以让解析器正确调用定义函数,比如上面的第二种调用方法。以及其他的一些符号,如:!、+、-、~

<script type="text/javascript">
    (function() {
        console.log('()');
    })(); // ()
    // console.log()中的()也可以让函数解析为表达式。
    console.log(function() {
        console.log('()'); // () 可正常输出
    }); // 函数无返回值,所以输出undefined;
    !function() {
        console.log('!');
    }(); // !
    +function() {
        console.log('+');
    }(); // +
    -function() {
        console.log('-');
    }(); // -
    ~function() {
        console.log('~');
    }(); // ~	
    // 可见上面的函数都执行了。
</script>
1-4 各个符号的含义
()、!、+、-、~这些符号写在函数前代表不同的含义,但是本质上是对函数的返回值进行相应的操作。
  1. 没返回值的函数默认返回undefined
console.log((function() {})()); // undefind;
console.log((function() {
    return;
})()); // undefind;
  1. 各个符号的含义
<script type="text/javascript">
    // () 没什么实际意义,不操作返回值
    console.log((function() {
        return 'aa';
    })()); // aa
    // ! 对返回值的真假取反
    console.log(!function() {
        return;
    }()); // true undefined属于false,
    console.log(!function() {
        return "a";
    }()); // false 字符串a属于真,
    console.log(!function() {
        return 0;
    }()); // true 数字0属于假,
    console.log(!function() {
        return "0";
    }()); // false 字符串0属于真,
    // +、- 是对返回值进行数学运算
    console.log(+function() {
        return 5.1;
    }()); // 5.1 
    console.log(-function() {
        return 5.1;
    }()); // -5.1 
    console.log(+function() {
        return "5.1";
    }()); // 5.1 可见返回值不是数字类型的时候 +、- 会将返回值进行强制转换
    console.log(-function() {
        return "-5.1";
    }()); // 5.1 强制转化 
    console.log(+function() {
        return "a5.1";
    }()); // NaN  强制转化后为非数字NaN
    console.log(+function() {
        return;
    }()); // NaN undefined强制转化也为NaN
    // ~ 对返回值进行按位取反
    // 所有正整数的按位取反是其本身+1的负数,
    // 所有负整数的按位取反是其本身+1的绝对值,
    // 零的按位取反是 -1
    // 按位取反原理详见下面
    console.log(~function() {
        return 5;
    }()); // -6 
    console.log(~function() {
        return -5;
    }()); // 4 
    console.log(~function() {
        return 0;
    }()); // -1
    console.log(~function() {
        return "5";
    }()); // -6 按位取反也会对返回值进行强制转换,将字符串5转化为数字5,然后再按位取反
    console.log(~function() {
        return "-5";
    }()); // 4
    console.log(~function() {
        return true; 
    }()); // -2 ture会被转化为1
    console.log(~function() {
        return false;
    }()); // -1 false被转化为0
    console.log(~function() {
        return "a";
    }()); // -1 其他非数字或不能转化为数字类型的返回值,统一当做0处理
</script>
1-5 分号 ; 的含义
function前写 ; 是为了防止代码压缩时,前面代码没写 ; 造成报错。
1-6 按位取反 ~

二进制数在内存中是以补码的形式存放的。
计算机中的符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

例:(四位二进制表示)原码
+4: 0100 其中第一个0是符号位,代表符号+;后面的数字是数值位
-4: 1100 其中第一个1是符号位,代表符号-;后面的数字是数值位

三种形式的转化方法:

正数:(正数原码、反码、补码、三者相等)
    原码:符号位0(即代表+号),加上数字的二进制形式。
    反码 = 原码
    补码 = 原码 
    原码:符号位1(即代表-号),加上数字的二进制形式 
    反码:相对于原码,符号位不变,数值位依次取反(0变1,1变0)。
    补码:相对于原码,符号位不变,数值位依次取反,然后再加1。(即补码 = 反码 + 1)
    0有 +0 和 -0两种形式,分别按照上面的进行计算即可。

按位取反原理:

对数字的补码(即内存中的存储形式),进行依次取反,得取反后数字的补码,然后将其转化为10进制,即可得取反后数值。

计算示例:(四位二进制表示)

1. 计算原码: 0101, 2. 计算补码:0101,正数补码和原码相同, 3. 对补码依次取反:1010,(取反后的数字的补码,由符号位可知为负数) 4. 取反后数字反码:1001,负数的反码 = 补码减1, 5. 取反后数字原码:1110,相对于反码,符号位不变,数值位依次取反, 6. 转化为十进制:-6。 1. 计算原码:1100,由符号位可知为负数, 2. 计算反码:1011,负数反码 = 相对于原码符号位不变,数值位依次取反, 3. 计算补码:1100,负数补码 = 反码 + 1, 4. 对补码依次取反:0011,得取反后数字补码,可知为正数, 5. 取反后数字原码:0011,正数原码和补码相同。 6. 转化为10进制:+3。 1、逻辑非(!)操作的作用(逻辑非)如果操作数能够转换为true,则返回false;否则返回为true。(即取反的意思)2、双叹号(!!)的作用双重否定即肯定!! --- 一般用来将后面的表达式强制转换为布尔值类型的数据(boolean),返回值为true或者false;3、!! 的使用意义1、应用场景:判断一个对象是否存在假设有这样一个json对象:{ color: "#E3E3E3", "f... 例如,~~true 会得到 -1(在JavaScript中通常被视为“假值”的标记),而 ~~false 会得到 0(在JavaScript中通常被视为“真值”的标记)。需要注意的是,尽管~运算在某些情况下可能很有用,但在大多数情况下,使用更直观、更易于理解的代码和数学操作是更好的选择。因此,在使用~运算时,请务必确保你了解其工作原理,并仔细考虑其是否适合你的特定用例。另外,需要注意的是,~运算在JavaScript中并不常用,如果你不是在进行底层的位操作或者特殊的数学运算,那么你可能不需要使用它。 最近在看bootstrap源码的时候,发现bootstrap的js函数名称前面了一个号(+)。 +function ($) {}(jQuery); 其实这里的号,也可以替换成其他的如叹号(!)、~等其他的一些一元操作,这里主要是为了将函数变成立即执行函数,立即执行函数,在js中,主... if (!~[this.activeValue, this.inactiveValue].indexOf(this.value)) { this.$emit('input', this.inactiveValue); 这个用法比较新颖,因为默认的写法都是 ['xx', 'yy'].indexOf(who) >= 0...  文章参考了:http://blog.csdn.net/yxin1322/articles/564597.aspxhttp://hi.baidu.com/wyuanshiy/blog/item/82f709339ad5a2f81b4cff4d.htmlhttp://blog.csdn.net/orbit/archive/2005/08/10/450413.aspxhttp://bl 在javascript代码中经常会见到!!的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法。分享给大家供大家参考之用。具体分析如下: javascript中的!!是逻辑"非非",即是在逻辑“非”的基础上再"非"一次。通过!或!!可以将很多类型转换成bool类型,再做其它判断。 使用javascript时,有时会在变量前面上两个感叹号,这样做表示什么含义呢?Javascript中,!表示运算“非”,如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非,那么用两个!!就可以将