我正在看一个旧的javascript文件,我注意到了这样的函数:
function mainFunction() {
var foo = new objFoo();
foo.name = "fooname";
foo.desc = "foodesc";
// some instructions here
{
var bar = new objBar();
bar.name = foo.name;
bar.desc = foo.desc;
// some other instructions here
}
return(foo);
}
我的问题是:围绕bar
对象定义的那些花括号的目的是什么(如果有的话)?
由于
答案 0 :(得分:3)
JavaScript中的大括号定义block。如果使用let
或const
初始化变量,则可以用于包含范围,但由于示例中的变量是使用var
初始化的,因此实际上并没有做任何事情(除非前一行中的语句如if
或while
等)。
只是按照您提供给我们的代码,我认为这是对代码的错误解释或对开发人员对JavaScript的误解。要使用var
变量在JavaScript中包含范围,您需要像这样编写闭包:
function mainFunction() {
var foo = new objFoo();
foo.name = "fooname";
foo.desc = "foodesc";
// some instructions here
(function () {
var bar = new objBar();
bar.name = foo.name;
bar.desc = foo.desc;
// some other instructions here
}());
return(foo);
}
答案 1 :(得分:1)
花括号定义具有局部范围的块。您可以在块中使用const
或let
定义变量,其范围仅限于块。
例如:
const a = "world"
{
const a = "hello"
console.log(a)
}
console.log(a)

在花括号块内使用var
是危险的,因为它会覆盖在块外定义的同名变量。如果您使用var
声明而不是const
/ let
,则块的唯一优势可能是更好的易读性。
var a = "world"
{
var a = "hello"
console.log(a)
}
console.log(a)