0

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

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

谢谢

4

1 回答 1

1

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

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

于 2013-01-30T18:19:23.327 回答