zoukankan      html  css  js  c++  java
  • 函数声明 及 名称问题

    题目:

    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"
  • 相关阅读:
    【全程NOIP计划】分治与倍增
    apple id 后端验证 django
    安装Tomcat8,在Eclipse中配置Tomcat8
    CURL并发测试POST和DELETE请求
    curl如何发起DELETE/PUT请求?(备忘)
    Ubuntu 11.10下安装配置Zend Studio 9.0破解版详细步骤
    RTP QOS
    RTCP
    DirectDraw基础篇
    RTSP简介
  • 原文地址:https://www.cnblogs.com/FineDay/p/9541929.html
Copyright © 2011-2022 走看看