• 函数声明 及 名称问题


    题目:

    var f = function g(){
      return ‘something'
    }
    typeof g()

    考察点如下:
    一     函数定义的方式 有三种:
    (1 )函数声明式 :函数被声明为一个命名函数
      function f(){
        ...
      }
      f.name      // "f"
      在js代码中,函数会被提前声明到作用域顶部, 名称f 在作用域内是 全局访问的

    (2 )函数表达式赋值式 :  创建一个匿名函数(或者有名函数),并赋值给一个变量  
      var f = function(){
        ...
      }
      //f.name 在es5下为  “” ,在es6下为  "g"
      var f = function g(){
        ...  
      }
      //f.name 在es5下为  “g” ,在es6下为  "g"  
      // 此处的函数名称 g只能在函数体内访问
      等号右侧的函数表达式赋值给了左侧的变量f,名称f 只有在声明后,才能访问,否则为undefined
    (3)Function()构造函数
      var f = new Function("x","y","return x+y"); //Function()构造函数

    二 函数名称问题
      所有的函数都有一个name属性,该属性保存的是该函数名称的字符串。
      

    • 函数被声明为一个命名函数 
      这种情况ES5和ES6语法一致,name属性返回该函数的函数名。

      function g(){}
      // es5 es6 下g.name 均为 ’g'
    • 创建一个匿名函数,并赋值给一个变量 
      在ES5中,该函数的name属性为“”,而 ES6 的name属性会返回实际的函数名

      var  f = function(){}
      // es5
      f.name // ""
      // es6 
      f.name // "f"
    • 创建一个匿名函数,将其赋值给一个window的属性 
      在ES5中,该函数的name属性返回函数名(window下的赋值属性名),而 ES6 的name属性会返回“”
    window.f = function () {};
    // ES5
    f.name // "f"
    
    // ES6
    f.name // ""
    • 创建一个命名函数,将其赋值给一个变量或window下的属性 
      这种情况ES5和ES6语法一致,name均返回函数的字面量名称,与将函数进行赋值的变量或属性名称无关
    var f = function g() {  
      console.log(arguments.callee === g)   // true
    };
    // ES5
    f.name // "g"
    
    // ES6
    f.name // "g"
    window.f = function g() {};
    
    // ES5
    f.name // "g"
    // ES6
    f.name // "g"
  • 相关阅读:
    生活中的大数据 hadoop
    IOS设计模式学习(11)中介者
    Java 编程的动态性,第3部分: 应用反射--转载
    Java编程 的动态性,第 2部分: 引入反射--转载
    Java 编程的动态性 第1 部分: 类和类装入--转载
    斐波那契数列(fabnacci)java实现
    Chrome调试大全--转载
    jboss7 加载module过程
    UML解惑:图说UML中的六大关系--转
    jboss学习
  • 原文地址:https://www.cnblogs.com/FineDay/p/9541929.html
Copyright © 2020-2023  润新知