发表于: 2016-08-12 21:42:48

0 2078


今天完成的事情:看js原生

明天计划的事情:加强基础

遇到的问题:无

收获:

函数表达式和函数声明


在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:


  函数声明:


  function 函数名称 (参数:可选){ 函数体 }


  函数表达式:


  function 函数名称(可选)(参数:可选){ 函数体 }


所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。


  function foo(){} // 声明,因为它是程序的一部分

  var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分


  new function bar(){}; // 表达式,因为它是new表达式


  (function(){

    function bar(){} // 声明,因为它是函数体的一部分

  })();

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式,我们来看几个例子:


  function foo(){} // 函数声明

  (function foo(){}); // 函数表达式:包含在分组操作符内

  

  try {

    (var x = 5); // 分组操作符,只能包含表达式而不能包含语句:这里的var就是语句

  } catch(err) {

    // SyntaxError

  }



返回列表 返回列表
评论

    分享到