定义与初始化

时间:2012-02-26 12:07:33

标签: javascript initialization declaration definition

声明,定义和初始化之间有什么区别?例如:

// Is this a declaration?
var foo;

// Did I defined object in here (but it is empty)?
var foo = {};

// Now that object is initialized with some value?
var foo = {first:"number_one"};

4 个答案:

答案 0 :(得分:5)

第一个例子是声明。您已声明了一个标识为foo的变量。你尚未给它一个值,所以它将是undefined

var foo;
console.log(foo); //undefined

第二个例子是声明和作业。您已为具有标识符foo的变量分配了一个空对象文字。正如评论中所指出的,这实际上很简短:

var foo;
console.log(foo); //undefined
foo = {};
console.log(foo); //Object

第三个例子是另一个声明和另一个作业。您已为foo分配了不同的对象字面值。

修改(见评论)

代码的行为略有不同,具体取决于您是希望每个示例作为独立程序运行,还是作为书面(一个程序)运行。

如果您对待的内容如下:

由于JavaScript中的变量声明被提升到它们出现的作用域的顶部,因此重新声明变量无效。所以第一行声明了一个变量foo

第二行将空对象文字指定给foo,第三行将不同的对象文字指定给foo。这两项任务都适用于同一foo

实际发生的是:

var foo;
foo = {}; //No `var` keyword
foo = {first:"number_one"}; //No `var` keyword

如果您将每一行视为单独的程序:

第一个程序声明一个名为foo的变量。它的值是undefined

第二个程序声明一个名为foo的变量,然后为其分配一个空对象文字。

第三个程序声明一个名为foo的变量,然后为一个对象文字指定一个属性。

答案 1 :(得分:2)

你做得对。

var foo;        // Is this a declaration ?

是的,您声明有一个名为foo的变量,但未定义foo(因此foo未定义)。

var foo = {}    // Did I defined object in here (but it is empty) ?

是的,现在你“定义”foo ...它有一个值,它不再是未定义的。 var foo = 5也算作“定义”它。

var foo = {first:"number_one"}  // Now that object is initialized with some value ?

你可以说它是“初始化的”,但那真的只是语义。 “声明”和“定义”更有意义。

答案 2 :(得分:0)

运行以下代码:

var foo;
console.dir(foo);
var foo = {};
console.dir(foo);
var foo = {first:"number_one"};
console.dir(foo);

答案 3 :(得分:0)

当您使用var foo;声明变量时,实际上确保它属于您定义它的范围。您所谓的定义和初始化实际上是一个值赋值。

考虑下面一段代码作为例子:

(function () {

  // definition
  var foo;

  function assignFoo(x) {
    // assignment
    foo = x;
  }

  assignFoo(5);

  console.log(foo);

})();

要说,您并不总是应该在定义范围内分配值。但它是最常见的用例,通常使用var foo = 5完成。

多数民众赞成。