来自函数参数的私有变量的含义?

时间:2013-01-30 18:06:57

标签: javascript function variables arguments

我并不完全确定我正确地问这个问题,因为我对高级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();

以这种方式将参数用作对象有什么含义?一切似乎都检查出来,代码工作正常,但我想知道是否有我不知道的后果。

由于

1 个答案:

答案 0 :(得分:1)

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

在你上一次foo decleration中,你正在“掩盖”传入的参数。 (假设你把var放在它前面)请注意,既然你没有在bar前放一个'var',你foo的第二个decleration就是将变量bar分配给全局命名空间,这可能是你的不打算..