声明javascript私有方法

时间:2012-02-22 14:10:34

标签: javascript oop private-members

  

可能重复:
  JavaScript: var functionName = function() {} vs function functionName() {}

在Javascript中,“私有方法”基本上只是内部函数。但是在网上提供的各种javascript教程中,似乎有两种声明私有方法的做法:

function foo()
{
  var privateMethod = function() { }
}

...对比

function foo()
{
  function privateMethod() { }
}

它们似乎都达到了相同的效果,即privateMethod无法通过foo的实例公开访问。唯一的区别似乎是第一种方式(使用var关键字),privateMethod仅适用于声明后的代码。但是第二种方式,privateMethod可用于foo内的所有代码。那么,是否有任何其他差异使这两种做法中的任何一种更可取?

1 个答案:

答案 0 :(得分:1)

还有另一个主要区别:在第一个例子中,函数is anonymous。它所分配的变量有一个名称,但函数本身没有。当您使用调试器并查看断点列表,调用堆栈等时,这很重要。

另一个主要区别是,第一个,称为函数表达式,发生在执行点到达代码的那一部分时,这意味着您可以根据变量分配不同的函数如果你想要逻辑流程。第二个,称为函数声明,仅在其包含范围的顶层有效(不在if块,try/catch等内,并且当执行进入包含范围的时(在运行任何分步代码之前)发生。

您可能很想将两者结合起来,使用命名函数表达式

var foo = function foo() { ... };

...但遗憾的是,虽然它有效,但各种JavaScript引擎(主要是微软)handle those incorrectly