只要函数被声明为函数关键字,javascript就会将一个内存块分配给函数本身存储的函数名。
function maiz(){}
console.log(maiz);//output:function maiz(){}
但是当函数被声明为匿名或者匿名函数将被存储在哪里时,js会做什么
(function (){})()
一旦声明了函数,就应该有一些内存来存储annonymos函数而不是执行它。我错了吗?
答案 0 :(得分:2)
您不能声明匿名函数。你可以做的是拥有一个匿名的函数表达式,这意味着你可以在某处提供函数对象(赋值,函数调用参数等)。请参阅Kangax' article或this 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函数的地方。