一旦使用 function 关键字声明函数,javascript 就会为函数名分配一块内存,函数本身被存储在其中。
function maiz(){}
console.log(maiz);//output:function maiz(){}
但是当函数被声明为匿名或匿名函数将存储在哪里时,js会做什么
(function (){})()
一旦函数被声明,就应该有一些内存来存储 annonymos 函数并执行它。我错了吗?
一旦使用 function 关键字声明函数,javascript 就会为函数名分配一块内存,函数本身被存储在其中。
function maiz(){}
console.log(maiz);//output:function maiz(){}
但是当函数被声明为匿名或匿名函数将存储在哪里时,js会做什么
(function (){})()
一旦函数被声明,就应该有一些内存来存储 annonymos 函数并执行它。我错了吗?
您不能声明匿名函数。你可以做的是有一个匿名函数表达式,这意味着你在某处提供函数对象(赋值、函数调用参数等)。有关区别,请参阅Kangax 的文章或此问题。
因此,如果您想知道匿名函数表达式的去向(在内存中),您将不得不查看周围的语句。比如这个:
(function (){});
将在实例化后立即被垃圾收集器消失。如果你有
(function (){})();
然后里面的代码将被执行(在一个新的范围内),但函数本身也不会被存储在任何地方。顺便说一句,这个构造被称为立即调用函数表达式 (IIFE)。
书中更好地解释了匿名函数Secrets of the JavaScript Ninja
(John Resig)
我们可以将匿名函数声明为对象的属性。
var ninja = {
shout: function(){ // shout property now referenced to anonymous function
assert(true,"Ninja");
}
};
匿名函数通常用于我们希望创建函数以供以后使用的情况,例如将其存储在变量中,将其建立为对象的方法,或将其用作回调(例如,作为超时或事件处理程序)。在所有这些情况下,函数不需要有名称供以后参考。
如果不需要通过名称引用函数,我们不必给它一个(匿名函数)。它表现为具有名称的实际函数。但它没有名字。因此,匿名函数存储在存储 javascript 函数的位置。