有具体名称的匿名函数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"

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

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

时间: 2024-07-30 17:48:08

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

javascript 匿名函数(anonymous function)和闭包(closure)

如何在JavaScript中创建一个真正的私有变量呢? 主要技巧是使用匿名函数(anonymous function)和闭包(closure). 有些不错的参考资料: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

JavaScript匿名函数与托付

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- C#匿名函数--> <title></title> <script type="text/javascript"> var f1 = function (x, y) { //[1] 定义一个匿名函数,用变量f1来指向它(f1相当于一个托付,这个时候f1就能够当做一个

JavaScript匿名函数与委托

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- C#匿名函数--> <title></title> <script type="text/javascript"> var f1 = function (x, y) { //[1] 定义一个匿名函数,用变量f1来指向它(f1相当于一个委托,这个时候f1就可以当做一个

第九章 Javascript之匿名函数

分析: 1.所谓匿名函数,从字面意思理解,就是没有名字的函数,js 用()来代替(注意,是英文状态下的括号) 2.定义形式: function (){ //to add codes that you want to add }   3.匿名函数作用 (1)与闭包函数相比较,最大作用是不污染全局对象,一旦执行完毕,GC自动回收内存,这是与闭包函数本质的区别.闭包函数的一大特点是: 变量常驻内存,只有关闭浏览器时,才释放. function f1(){ var n=999; nAdd=functio

c# 匿名函数与委托

在 2.0之前的 C#版本中,声明委托的唯一方法是使用命名方法. C# 2.0引入了匿名方法,而在 C# 3.0及更高版本中,Lambda表达式取代了匿名方法,作为编写内联代码的首选方式.不过,本主题中有关匿名方法的信息同样也适用于 Lambda表达式.有一种情况下,匿名方法提供了 Lambda表达式中所没有的功能.可使用匿名方法来忽略参数列表.这意味着匿名方法可转换为具有各种签名的委托.这对于 Lambda表达式来说是不可能的.有关 lambda表达式的更多特定信息,参看MSDN //匿名函数

匿名函数和闭包,第一篇

匿名函数就是没有名字的函数,或者是它把名字隐藏起来,你看不到函数名.闭包是可访问一个函数作用域里的变量的函数,或者是就是一个函数里还有一个函数,那就是闭包. 匿名函数 //普通函数 function box(){ return 'link'; } alert(box()) //匿名函数 function (){ //单独的匿名函数,是无法运行的 return 'html' //就算能运行,是无法调用,因为没有名称 } //把匿名函数赋值给变量 var box=function(){ return

浅谈JavaScript匿名函数与闭包

一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); }                        //语法错误,无法执行 1.简单的使用: var box =  function(){ return 'Lee'; } alert (box());        //需要调用box()方法. 2.通过自我执行来执行匿名函数 (function(){                /

声明函数 执行上下文 匿名函数

方法一: var foo = function () { //code } 方法二: function foo () { //code } 方法一:foo在进入函数执行上下文开始执行代码的时候,foo是undefined的,执行完var foo = function () { }这句,foo才会得到赋值: 方法二:在进入函数执行上下文开始执行代码的时候,foo已经是一个function了. 一旦进入执行上下文(在执行代码之前),VO(变量对象)就会被一些属性填充: 函数的形参(当进入函数执行上下

什么叫匿名函数

1,什么叫匿名函数,就是把名字用~!()等特别符号命名,并放在function最前面.执行时不用直接用()不用名称.function Test(){}~function(){}() 2,闭包理解:函数调函数,返加函数var test=function(){return function(){}} 3,arguments用法.函数调用时,发果找不到对应传参.直接到到无参.arguments可以取到所有传进参数.function test(){alert(arguments[0])}test("00