定义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?