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

  • 相关阅读:
    CDH5.16.1集群企业真正离线部署
    创建node节点上kubeconfig文件
    二进制文件安装安装flannel
    二进制文件安装安装etcd
    二进制文件安装k8s所需要的证书服务
    快速安装k8s,版本为1.13.8
    利用dockerfile 安装一个nginx-1.14.1
    在非spring管理的类中,使用spring管理的类
    远程连接MySQL错误:Can't connect to MySQL server (10060)
    Java继承与多态
  • 原文地址:https://www.cnblogs.com/bobogoodgoodstudy/p/4472125.html
Copyright © 2011-2022 走看看