function和感叹号,运算符号的转化

1、下面的程序经过运算之后,a为true,这个很好理解,但是函数怎么会运行呢?

var a = !function(){
            alert('message');
        }();
console.log(a);

下面这个a为defined,但是可以也运行函数

var a = (function(){
                    alert('message');
        })();
console.log(a);

其实上面两种方式在于把函数转化成为了表达式使用。
但是不同的符号所表达的意思是有所不同的,上面函数能够运行的原因是因为符号消除了函数表达式和函数声明的歧义,让解析器可以正确的解析。
但是,对还有一个但是,符号会处理自己自身的意思,比如!作为取反来使用,()作为转化表达式来使用。

有这些功能的还有这些常见的用法:

!function(){alert('message')}()        // true
+function(){alert('message')}()        // NaN
-function(){alert('message')}()        // NaN
~function(){alert('message')}()        // -1
var i = function(){return 10}();        // undefined  
1 && function(){return true}();        // true  
1, function(){alert('message')}();        // undefined  
void function(){alert('iifksp')}()        // undefined  
new function(){alert('iifksp')}()        // Object  
delete function(){alert('iifksp')}()        // true 
(function(){alert('message')})()        // undefined
(function(){alert('message')}())        // undefined

原文地址:https://www.cnblogs.com/thecatshidog/p/5815374.html