花括号内的JS变量定义

时间:2017-10-23 16:03:24

标签: javascript

我正在看一个旧的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对象定义的那些花括号的目的是什么(如果有的话)?

由于

2 个答案:

答案 0 :(得分:3)

JavaScript中的大括号定义block。如果使用letconst初始化变量,则可以用于包含范围,但由于示例中的变量是使用var初始化的,因此实际上并没有做任何事情(除非前一行中的语句如ifwhile等)。

只是按照您提供给我们的代码,我认为这是对代码的错误解释或对开发人员对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)

花括号定义具有局部范围的块。您可以在块中使用constlet定义变量,其范围仅限于块。

例如:



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)