有具体名称的匿名函数var bar = function foo(){}

Posted ︶ㄣ鳯躌氷瀚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有具体名称的匿名函数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"

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

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

 

以上是关于有具体名称的匿名函数var bar = function foo(){}的主要内容,如果未能解决你的问题,请参考以下文章

使用对象和自执行匿名函数的 jQuery 命名空间

javascript中使用attachEvent添加了匿名函数事件,如何用detachEvent移除这个事件?

函数式编程---匿名函数(lambda)

Java之lambda表达式与函数式接口

像“var foo = function bar() ...”这样的Javascript函数?

javascript中匿名函数和普通函数的区别