美文网首页
命名函数表达式总结

命名函数表达式总结

作者: praycis | 来源:发表于2018-08-27 17:07 被阅读0次

命名函数表达式

提到命名函数表达式,理所当然,就是它得有名字,但有一点需要记住:这个名字只在新定义的函数作用域内有效,因为规范规定了标示符不能在外围的作用域内有效:

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

给命名函数表达式赋值的最主要的原因是为了方便在调试的时候方便的看到当前调用的函数名称

var f = (function(){
    var f, g;
    if (true) {
      f = function g(){};
    }
    else {
      f = function g(){};
    }
    // 设置g为null以后它就不会再占内存了
    g = null;
    return f;
  })();

这个匿名函数调用返回的函数(带有标识符g的函数),然后赋值给了外部的f。我们也知道,命名函数表达式会导致产生多余的函数对象,而该对象与返回的函数对象不是一回事。所以这个多余的g函数就死在了返回函数的闭包中了,因此内存问题就出现了。这是因为if语句内部的函数与g是在同一个作用域中被声明的。这种情况下 ,除非我们显式断开对g函数的引用,否则它一直占着内存不放。通过设置g为null,垃圾回收器就把g引用的那个隐式函数给回收掉了

相关文章

  • 2018-12-08

    7.5 总结 在Javascript变成中,函数表达式是一种非常有用的技术。使用函数表达式可以无须对函数命名,从而...

  • this那些事(js)

    1、function 声明和表达式 函数是对象,函数名是指针 命名函数表达式 var foo = function...

  • 关于函数名的问题

    使用函数声表达式的函数,其中如果的命名函数,则其 name 为命名函数的名字 new 出来的函数的 name 是匿...

  • 命名函数表达式总结

    命名函数表达式 提到命名函数表达式,理所当然,就是它得有名字,但有一点需要记住:这个名字只在新定义的函数作用域内有...

  • JS相关知识学习笔记(三)

    1、函数的定义 (1)命名函数 (2)函数表达式(匿名函数) (3)new Function('参数1', '参数...

  • 函数

    一、函数声明 function test() {} 1.命名函数表达式 var test = function a...

  • 一篇文章告诉你JS函数表达式所有特点

    函数表达式特点 在JS编程中,函数表达式是一种非常有用的技术。使用函数表达式可以无需对函数命名,从而实现动态编程。...

  • 函数与作用域

    1. 函数声明和函数表达式有什么区别? 函数声明:可以定义命名的函数变量,而无需给变量赋值 函数表达式:将函数定义...

  • 03JavaScript-函数进阶

    函数的定义方式 方式1 函数声明方式 function 关键字 (命名函数) 方式2 函数表达式(匿名函数) 方式...

  • kotlin中级篇

    函数和lambda表达式 函数声明 函数调用 默认参数 命名参数 可变数量的参数(Varargs)函数的参数(通常...

网友评论

      本文标题:命名函数表达式总结

      本文链接:https://www.haomeiwen.com/subject/pvhtwftx.html