javascript函数的调用种类

第一种:
var foo = function(){}

  分析:该函数为函数表达式,也可以理解成是一个引用,用foo()调用可执行。

  第二种:

var foo = function(){}();

  分析:该函数为立即调用函数,这和第一种的区别就是后面有无小括号,也就是函数调用和函数引用的区别,函数调用可理解为自执行函数(最好在function(){}外加一个括号变成(function(){})(),更规范一点);

  第三种:

function(){}

  分析:该函数缺少名称,未赋值,所以报错。

  第四种:

function(){}()

  分析:function(){}是语句,不是函数表达式,只有表达式才能调用,所以报错。

  第五种:

( function(){})();

  分析:(function(){})是函数表达式,能调用,称为匿名自执行函数。

  第六种:

( function(){}());

  分析:(function(){}())是函数表达式,可用,称为匿名自执行函数(汤姆大叔推荐的写法,我更喜欢第五种写法)。

  第七种:

function foo(){}

  分析:该函数为实名函数,可调用。

  第八种:

function foo(){}();

  分析:解释和第四种一样,因为function foo(){}是语句,不是表达式,不能调用,所以报错。

  第九种:

function foo(){}(a);

  分析:解释和第四种一样,因为function foo(){}是语句,不是表达式,不能调用,但是因为后面括号中传入了参数,所以未抛出异常,也就为报错,但是本身还是不执行的。

  第十种:

( function foo(){});

  分析:function外添加一个括号,所以外部作用域就不能调用foo()这个函数了,里面被当做匿名函数了,我个人认为这样的函数没什么意义,既不能调用也不能自执行。

  第十一种:

( function foo(){})();

  分析:有了十,这个就可以理解为是匿名自执行函数了。但是在ie8以下能执行,该表达式被当做函数声明,函数声明有种“置顶解析”的行为,就是不管函数在哪个地方定义,它都会在该作用域顶部默认声明好。

  第十二种:

! function(){}();

  分析:其实小括号和js的&&,异或,逗号等操作是在函数声明和表达式消除歧义的,为可执行的。

你可能感兴趣的:(JavaScript,函数)