0

一旦使用 function 关键字声明函数,javascript 就会为函数名分配一块内存,函数本身被存储在其中。

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

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

(function (){})()

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

4

2 回答 2

2

您不能声明匿名函数。你可以做的是有一个匿名函数表达式,这意味着你在某处提供函数对象(赋值、函数调用参数等)。有关区别,请参阅Kangax 的文章此问题

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

 (function (){});

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

 (function (){})();

然后里面的代码将被执行(在一个新的范围内),但函数本身也不会被存储在任何地方。顺便说一句,这个构造被称为立即调用函数表达式 (IIFE)

于 2013-04-27T15:57:50.663 回答
0

书中更好地解释了匿名函数Secrets of the JavaScript Ninja(John Resig)

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

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

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

如果不需要通过名称引用函数,我们不必给它一个(匿名函数)。它表现为具有名称的实际函数。但它没有名字。因此,匿名函数存储在存储 javascript 函数的位置。

于 2013-04-27T16:55:09.037 回答