定义vs初始化

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

// 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"};

第一个例子是一个声明。 您已经使用标识符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的变量,然后为其分配一个具有一个属性的对象文字。


你做对了。

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 ?

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


运行下面的代码:

var foo;
console.dir(foo);
var foo = {};
console.dir(foo);
var foo = {first:"number_one"};
console.dir(foo);
链接地址: http://www.djcxy.com/p/95029.html

上一篇: Definition vs initialization

下一篇: How to make a variable which is inside a function global?