zoukankan      html  css  js  c++  java
  • 有具体名称的匿名函数var bar = function foo(){}

    http://kangax.github.io/nfe/

    命名的函数表达式

    函数表达式实际上可以经常看到。Web开发中的一个常见模式是基于某种特性测试来“分叉”函数定义,从而获得最佳性能。由于这种分叉通常发生在相同的范围内,所以几乎总是需要使用函数表达式。毕竟,就我们现在所知,函数声明不应该有条件地执行:

    // `contains` is part of "APE Javascript library" (http://dhtmlkitchen.com/ape/) by Garrett Smith
    var contains = (function() {
      var docEl = document.documentElement;
    
      if (typeof docEl.compareDocumentPosition != 'undefined') {
        return function(el, b) {
          return (el.compareDocumentPosition(b) & 16) !== 0;
        };
      }
      else if (typeof docEl.contains != 'undefined') {
        return function(el, b) {
          return el !== b && el.contains(b);
        };
      }
      return function(el, b) {
        if (el === b) return false;
        while (el != b && (b = b.parentNode) != null);
        return el === b;
      };
    })();

    很明显,当一个函数表达式有一个名称(技术上的标识符)时,它被称为命名函数表达式你在第一个例子中看到的var bar = function foo(){};- 就是那个 - 一个名为函数的函数表达式foo需要记住的一个重要细节是,这个名称只在新定义的函数的范围内可用 ; 规范要求标识符不应该被封闭的范围使用:

    var f = function foo(){
      return typeof foo; // "foo" is available in this inner scope
    };
    // `foo` is never visible "outside"
    typeof foo; // "undefined"
    f(); // "function"

    那么这些命名的函数表达式有什么特别之处呢?我们为什么要给他们的名字呢?

    看来,命名的功能使得调试体验更加愉快。调试应用程序时,调用堆栈和描述性项目会产生巨大的差异。

  • 相关阅读:
    django缓存,信号,orm性能,多数据库配置
    git实战
    Web框架
    Windows Server 2012 R2 管理员密码忘记如何修改密码
    主机记录和记录值
    Python的类
    GenomicRangeQuery Find the minimal nucleotide from a range of sequence DNA.
    Countdiv-Codility Lesson5
    Windows域控时间不正确,设置互联网NTP服务器时间自动同步
    Missing Smallest positive integer
  • 原文地址:https://www.cnblogs.com/oklfx/p/8018521.html
Copyright © 2011-2022 走看看