可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
在Javascript中,“私有方法”基本上只是内部函数。但是在网上提供的各种javascript教程中,似乎有两种声明私有方法的做法:
function foo()
{
var privateMethod = function() { }
}
...对比
function foo()
{
function privateMethod() { }
}
它们似乎都达到了相同的效果,即privateMethod
无法通过foo
的实例公开访问。唯一的区别似乎是第一种方式(使用var
关键字),privateMethod
仅适用于声明后的代码。但是第二种方式,privateMethod
可用于foo
内的所有代码。那么,是否有任何其他差异使这两种做法中的任何一种更可取?
答案 0 :(得分:1)
还有另一个主要区别:在第一个例子中,函数is anonymous。它所分配的变量有一个名称,但函数本身没有。当您使用调试器并查看断点列表,调用堆栈等时,这很重要。
另一个主要区别是,第一个,称为函数表达式,发生在执行点到达代码的那一部分时,这意味着您可以根据变量分配不同的函数如果你想要逻辑流程。第二个,称为函数声明,仅在其包含范围的顶层有效(不在if
块,try/catch
等内,并且当执行进入包含范围的时(在运行任何分步代码之前)发生。
您可能很想将两者结合起来,使用命名函数表达式:
var foo = function foo() { ... };
...但遗憾的是,虽然它应有效,但各种JavaScript引擎(主要是微软)handle those incorrectly。