//以下情形并无差别
var count100 = function getCount100(){ return(100) }();//100
var count200 = (function getCount200(){ return(200) })();//200,加小括号和count100没有区别
var count = (function getCount(n){ return(n) })(300);//300,传参的情形
//不赋值变量,函数体加小括号,自动执行
(function aaa(){console.log("aaa")})();// aaa
console.log(aaa);//aaa is not defined
//一个匿名函数,函数体不加小括号,是不能自动执行的
function bbb(){console.log("bbb")}();//Unexpected token )
//函数声明置于小括号中,没有自执行
( function fn(){console.log("aaa");return "bbb"} );
console.log("fn res is " + fn);// fn is not defined
//函数声明置于小括号中,且自执行
( function fn(){console.log("aaa");return "bbb"}() );//输出aaa
console.log("fn res is " + fn);// fn is not defined
//函数声明置于小括号中,且自执行,注意,负责执行的一对小括号移到了外部
( function fn(){console.log("aaa");return "bbb"} )();//输出aaa
console.log("fn res is " + fn);// fn is not defined
//函数声明置于小括号中,函数未执行但将其赋值给fn
( fn = function aaa(){console.log("aaa");return "bbb"} )
console.log("fn res is " + fn());//fn res is bbb
//函数声明置于小括号中,函数执行,并且将其赋值给fn
( fn = function aaa(){console.log("aaa");return "bbb"}() );//输出aaa
console.log("fn res is " + fn);//fn res is bbb
//函数声明置于小括号中,将其赋值给fn,并且在外部执行之(注意末尾小括号位置)
( fn = function aaa(){console.log("aaa");return "bbb"} )();//输出aaa
console.log("fn res is " + fn());//再次输出aaa,并输出fn res is bbb
// 匿名函数在自执行,注意末尾小括号位置
( function(){console.log("aaa");return "bbb"} )();//输出aaa
// 匿名函数在自执行,可见和上边的例子效果一致
( function(){console.log("aaa");return "bbb"}() );//输出aaa
//在括号外赋值的函数表达式,例一。以下三例的结果是一致的
var fn = function aaa(){return "bbb"}();
console.log("fn is res " + fn);//fn is res bbb
//例二
var fn = (function aaa(){return "bbb"})();
console.log("fn is res " + fn);//fn is res bbb
//例三
var fn = (function(){return "bbb"})();
console.log("fn is res " + fn);//fn is res bbb
-------
//正常的函数,注意fn的name属性自动设置为fn
function fn(){return "bbb"};
console.log(fn.name);//fn
console.log("fn is res " + fn());//fn is res bbb
//函数表达式,注意fn的name属性是fn
var fn = function(){return "bbb"};
console.log(fn.name);//fn
console.log("fn is res " + fn());//fn is res bbb
//函数表达式,注意fn的name属性是aaa
var fn = function aaa(){return "bbb"};
console.log(fn.name);//aaa
console.log("fn is res " + fn());//fn is res bbb
对于如此多的不同情形,可以总结如下:
原文:https://www.cnblogs.com/zk995/p/10430950.html