【问题标题】:Implications of private variables from function arguments?函数参数中私有变量的含义?
【发布时间】:2013-01-30 18:06:56
【问题描述】:

我不完全确定我的问题是否正确,因为我对高级 Javascript 的技术理解有些欠缺。但是,假设我有一个功能。在此函数 (foo) 中,传递了一个参数 (bar),该参数被创建为私有变量。

function foo(bar){
    console.log(bar);
}
foo("wassup");

我认为即使未分配,bar 仍保留私有范围而不被声明,我是否正确?它也仍然是一个对象?所以不要这样做:

function foo(){
    var bar = {
        message: "wassup"
    };
    console.log(bar.message);
}
foo();

我可以这样做:

function foo(bar){
    bar = {
        message: "wassup"
    };
    console.log(bar.message);
}
foo();

以这种方式将参数用作对象有什么含义?一切似乎都检查过了,代码运行良好,但我想知道是否有我不知道的后果。

谢谢

【问题讨论】:

  • 函数形式参数几乎在所有方面都与局部变量相同。
  • 另外,变量碰巧具有的值的种类实际上与它是参数还是局部变量没有任何关系。

标签: javascript function variables arguments


【解决方案1】:

这是一个闭包的例子,你的第二个函数 foo 是在 bar 上形成一个闭包。使用闭包进行编码会产生后果,但幸运的是,它们主要由引擎解决,并且通常不是编码人员关心的问题。实际上,形成闭包被认为是一种很好的数据封装形式,许多模式都严重依赖这种技术。

在您最后一次 foo 声明中,您正在“屏蔽”传入的参数。 (假设您按照应有的方式将 var 放在前面)请注意,由于您没有在 bar 前面放置“var”,因此您对 foo 的第二次声明是将变量 bar 分配给全局命名空间,这可能是您的不是故意的。。

【讨论】:

  • 感谢您的评论。最后一个声明是一个基本示例,但通常foo 函数将是一个匿名函数。我的问题是:使用未定义的参数作为内部私有变量(没有将其声明为 var,如上一个示例所示)是我不应该做的事情吗?如果有,为什么?
  • 如果你不需要,永远不要暴露状态。如果您可以在功能范围内制作本地内容,那么这通常是最好的方法
猜你喜欢
  • 2018-07-05
  • 2023-03-06
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2013-08-02
  • 2014-07-13
相关资源
最近更新 更多