zoukankan      html  css  js  c++  java
  • 函数表达式和函数声明~(自己的记录)

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

    那么没有函数名那肯定就是函数表达式了,那么有函数名时,如何区分它是函数表达式还是函数声明呢~~如果是作为赋值表达式的一部分则为函数表达式,如果是包含在一个函数体内,或者位于程序的最顶部的话则作为函数声明~

    function foo(){} // 声明,因为它是程序的一部分
      var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
    
      new function bar(){}; // 表达式,因为它是new表达式
    
      (function(){
        function bar(){} // 声明,因为它是函数体的一部分
      })();

    差别:

    表达式和声明的差别很小~声明是先于任何表达式解析和计算之前的~

    命名函数表达式(有函数名的函数表达式)

    提到命名函数表达式,理所当然,就是它得有名字,前面的例子var bar = function foo(){};就是一个有效的命名函数表达式,但有一点需要记住:这个名字只在新定义的函数作用域内有效,因为规范规定了标示符不能在外围的作用域内有效:

      var f = function foo(){
    return typeof foo; // foo是在内部作用域内有效
    };
    // foo在外部用于是不可见的
    typeof foo; // "undefined"
    f(); // "function"

    既然,这么要求,那命名函数表达式到底有啥用啊?为啥要取名?

    正如我们开头所说:给它一个名字就是可以让调试过程更方便,因为在调试的时候,如果在调用栈中的每个项都有自己的名字来描述,那么调试过程就太爽了,感受不一样嘛。

    更多内容请见原网页 http://www.cnblogs.com/TomXu/archive/2011/12/29/2290308.html

  • 相关阅读:
    P6665 [清华集训2016] Alice 和 Bob 又在玩游戏
    模板库
    CSP-S2021 游记
    CSP-S2021 SD迷惑行为大赏
    博弈论总结
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏(二分图最大匹配必经点)
    LOJ6065「2017 山东一轮集训 Day3」第一题
    LOJ6059「2017 山东一轮集训 Day1」Sum
    LOJ6102「2017 山东二轮集训 Day1」第三题
    python笔记:字符编码
  • 原文地址:https://www.cnblogs.com/bobogoodgoodstudy/p/4472125.html
Copyright © 2011-2022 走看看