javascript中匿名函数的内存消耗

时间:2013-04-27 15:54:02

标签: javascript

只要函数被声明为函数关键字,javascript就会将一个内存块分配给函数本身存储的函数名。

function maiz(){}
console.log(maiz);//output:function maiz(){}

但是当函数被声明为匿名或者匿名函数将被存储在哪里时,js会做什么

(function (){})()

一旦声明了函数,就应该有一些内存来存储annonymos函数而不是执行它。我错了吗?

2 个答案:

答案 0 :(得分:2)

您不能声明匿名函数。你可以做的是拥有一个匿名的函数表达式,这意味着你可以在某处提供函数对象(赋值,函数调用参数等)。请参阅Kangax' articlethis question了解差异。

因此,如果您想知道匿名函数表达式的位置(在内存中),您将不得不查看周围的语句。例如:

 (function (){});

在实例化后立即被垃圾收集器消失。如果你有

 (function (){})();

然后将执行内部代码(在新范围内),但函数本身也不会存储在任何地方。顺便说一句,这个结构称为immediately-invoked function expression (IIFE)

答案 1 :(得分:0)

匿名函数在书Secrets of the JavaScript Ninja(John Resig)

中有更好的解释

我们可以将匿名函数声明为对象的属性。

var ninja = {
    shout: function(){ // shout property now referenced to anonymous function 
        assert(true,"Ninja");
    }
};
  

匿名函数通常用于我们希望的情况   创建一个函数供以后使用,例如将其存储在变量中,   将其建立为对象的方法,或将其用作回调   (例如,作为超时或事件处理程序)。在所有这些中   在这种情况下,该函数不需要为以后的名称   参考

如果不需要通过名称引用函数,我们就不必给它一个(匿名函数)。它表现为具有名称的实际功能。但它没有名字。所以匿名函数存储在存储javascript函数的地方。