我并不完全确定我正确地问这个问题,因为我对高级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();
以这种方式将参数用作对象有什么含义?一切似乎都检查出来,代码工作正常,但我想知道是否有我不知道的后果。
由于
答案 0 :(得分:1)
这是一个闭包的例子,你的第二个函数foo正在形成一个闭包。使用闭包进行编码会产生后果,但幸运的是,它们主要由引擎解决,并且它们通常不是编码器的关注点。实际上,形成闭包被认为是一种很好的数据封装形式,许多模式在很大程度上依赖于这种技术。
在你上一次foo decleration中,你正在“掩盖”传入的参数。 (假设你把var放在它前面)请注意,既然你没有在bar前放一个'var',你foo的第二个decleration就是将变量bar分配给全局命名空间,这可能是你的不打算..