侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

JavaScript学习笔记(2)

2024-05-09 星期四 / 0 评论 / 0 点赞 / 81 阅读 / 3070 字

参考自汤姆大叔深入理解JavaScript系列 1、函数表达式和函数声明 函数声明:   function函数名称(参数:可选){函数体}   函数表达式:   function函数名称(可选)(

参考自汤姆大叔深入理解JavaScript系列

 

1、函数表达式和函数声明

       函数声明:

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

  函数表达式:

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

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

  function foo(){} // 声明,因为它是程序的一部分  var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分  new function bar(){}; // 表达式,因为它是new表达式  (function(){    function bar(){} // 声明,因为它是函数体的一部分  })();  (function foo(){}); // 函数表达式:包含在分组操作符内    try {    (var x = 5); // 分组操作符,只能包含表达式而不能包含语句:这里的var就是语句  } catch(err) {    // SyntaxError  }

函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:

 // 千万别这样做!  // 因为有的浏览器会返回first的这个function,而有的浏览器返回的却是第二个  if (true) {    function foo() {      return 'first';    }  }  else {    function foo() {      return 'second';    }  }  foo();  // 相反,这样情况,我们要用函数表达式  var foo;  if (true) {    foo = function() {      return 'first';    };  }  else {    foo = function() {      return 'second';    };  }  foo();

函数声明的实际规则如下:

函数声明只能出现在程序函数体内。从句法上讲,它们 不能出现在Block(块)({ ... })中,例如不能出现在 if、while 或 for 语句中。因为 Block(块) 中只能包含Statement语句, 而不能包含函数声明这样的源元素。另一方面,仔细看一看规则也会发现,唯一可能让表达式出现在Block(块)中情形,就是让它作为表达式语句的一部分。但是,规范明确规定了表达式语句不能以关键字function开头。而这实际上就是说,函数表达式同样也不能出现在Statement语句或Block(块)中(因为Block(块)就是由Statement语句构成的)。 

 

 

广告 广告

评论区