Javascript私有变量和参数有什么区别

Javascript private variables and parameters what is the difference?

本文关键字:什么 区别 参数 变量 Javascript      更新时间:2023-09-26

在javascript中创建一些对象时,我开始想知道创建仅指向参数的私有变量是否有任何意义,因为对象中的所有函数(可以使用私有变量)都在javascript中的对象函数内。

例:我通常这样做

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

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

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

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

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

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

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

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

无论如何,我都不希望速度的差异很重要,除非您多次呼叫something

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

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