0

在 javascript 中创建一些对象时,我开始怀疑是否有必要创建仅指向参数的私有变量,因为对象中的所有函数(可以使用私有变量)都在 javascript 中的对象函数内部。

示例:我通常这样做

function Foo(a) {
   var _a = a;
   function something() {
      _a += 1;
      somethingElse(_a);
   }
}

但对我来说,似乎我可以这样做:

function Foo(a) {
   function something() {
      a += 1;
      somethingElse(a);
   }
}

那么我的问题是,我是否在这里遗漏了什么或做错了什么,或者这是设计我的 javascript 对象的好方法?

4

2 回答 2

1

那么我的问题是,我是否在这里遗漏了什么或做错了什么,或者这是设计我的 javascript 对象的好方法?

从功能上讲,您的示例没有区别,除了使用_a,您有一个您并不真正需要的额外变量。

在松散模式下,可能会有微小的性能差异,因为写入参数不仅需要更新命名副本 ( a),还需要更新arguments伪数组。在严格模式下,两者(命名版本和 中的条目arguments)没有链接,因此您没有那么微小的潜在性能差异。

当然,这是 JavaScript,优化因引擎而异。例如,快速测试显示 Chrome 上的差异为零,并且在 Firefox 上使用的参数要慢得多使用严格版本,Firefox 上的差异就消失了(但它太小了,很容易出现测量错误)。(这个答案的早期副本说其中一个在 IE8 上速度较慢,但​​我认为这是测量错误,因为我无法复制结果。)

无论如何,我都不认为速度上的差异会很重要,除非你打something了很多次电话。

于 2013-09-13T08:57:30.493 回答
1

您的两个示例之间的功能没有区别。_a 变量是多余的。

来源:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope

于 2013-09-13T08:54:55.983 回答