Edw*_*uay 0 javascript function
作为这个问题的后续仍然试图解决Javascript函数异常,有人可以解释为什么下面的代码有效吗?
我的文字(Javascript Patterns)说明:
如果您创建一个新函数并将其分配给已经拥有另一个函数的同一个变量,那么您将使用新函数覆盖旧函数.
这将使我认为下面的代码中,变量count和name函数的第二个定义时,将重挫test创建.
变量count和name生活在哪里?
$(document).ready(function() {
var test = function() {
var name = 'The Test Function';
var count = 1;
console.log(name + ' has been setup');
test = function() {
console.log('Number of times ' + name + ' has been called: ' + count);
count++;
};
}
test();
test();
test();
test();
test();
});
Run Code Online (Sandbox Code Playgroud)

您正在替换该test函数,但是您正在用一个"关闭"(具有持久引用)第一个函数调用创建的变量的函数替换它.这就是为什么你看到它们继续存在,即使之前的函数调用已经返回.关于闭包的更多信息,它们是语言中非常重要的一部分.
这是对正在发生的事情的细分.
test.test.test.一个执行上下文有一种叫做变量对象.此对象(您无法直接访问)具有var该调用的所有参数和s的属性test.test设置,包括创建一个新函数并将其分配给test变量.新函数对创建它的执行上下文有持久的引用,这意味着即使第一次调用test返回,新函数仍然可以访问(通过变量对象)为调用创建的变量.test再打电话(新的).