在Javascript中声明变量但不初始化它
目前,我正试图将注意力集中在声明Javascript变量而不是立即初始化它的用例上。我知道声明变量将为该变量存储/留出内存以备将来使用,但是声明变量而不立即初始化它有什么意义呢 我的第一个想法是在一个用例中声明一个变量用于多个函数,或者用于创建多个对象,如下所示:在Javascript中声明变量但不初始化它,javascript,variables,Javascript,Variables,目前,我正试图将注意力集中在声明Javascript变量而不是立即初始化它的用例上。我知道声明变量将为该变量存储/留出内存以备将来使用,但是声明变量而不立即初始化它有什么意义呢 我的第一个想法是在一个用例中声明一个变量用于多个函数,或者用于创建多个对象,如下所示: var me; function firstMe(){ var me = "Ryan"; //do something... } function secondMe(){ var me = "Bob"; //do so
var me;
function firstMe(){
var me = "Ryan";
//do something...
}
function secondMe(){
var me = "Bob";
//do something...
}
使用这样的变量是一种好的做法吗?在什么情况下,声明变量而不初始化变量是有用的或首选的?如果在函数中重新声明“var me”,这些变量将不是全局变量。你宁愿做:
var me;
function firstMe(){
me = "Ryan";
//do something...
}
function secondMe(){
me = "Bob";
//do something...
}
如果在函数中重新声明“var me”,这些变量将不是全局变量。你宁愿做:
var me;
function firstMe(){
me = "Ryan";
//do something...
}
function secondMe(){
me = "Bob";
//do something...
}
首先,它总是初始化为
未定义的:
var a;
a === undefined; // true
var b = undefined; // exact same thing
现在,由于语言是弱类型的,当未定义时
变量不会设置内存以备将来使用,因为它不知道您将如何使用它,直到您为它分配了一些内容
至于何时声明而不是初始化,这是非常特定于您的需求和约束的;例如,一种常见的技术(处理javascript全局范围的细微差别)是在函数开始时声明所有需要的变量,这样,如果忘记使用var
,它们就不会无意中进入全局范围:
var a, b, c;
// some code
a = 1 // since it was declared at the beginning, this will stay in local scope
这被认为是良好的做法
为了澄清,在您的示例中,您在每个函数中声明var me
,这实际上在局部范围中创建了一个新变量,因此您没有更改全局范围;例如,以以下代码为例:
var me = 'jaime';
function change() {
var me = 'ryan';
}
change()
alert(me) // jaime
还值得一提的是,在使用前声明变量(未初始化)对实际性能没有好处,只是不用担心。对于初学者,它总是初始化为未定义的
:
var a;
a === undefined; // true
var b = undefined; // exact same thing
现在,由于语言是弱类型的,当未定义时
变量不会设置内存以备将来使用,因为它不知道您将如何使用它,直到您为它分配了一些内容
至于何时声明而不是初始化,这是非常特定于您的需求和约束的;例如,一种常见的技术(处理javascript全局范围的细微差别)是在函数开始时声明所有需要的变量,这样,如果忘记使用var
,它们就不会无意中进入全局范围:
var a, b, c;
// some code
a = 1 // since it was declared at the beginning, this will stay in local scope
这被认为是良好的做法
为了澄清,在您的示例中,您在每个函数中声明var me
,这实际上在局部范围中创建了一个新变量,因此您没有更改全局范围;例如,以以下代码为例:
var me = 'jaime';
function change() {
var me = 'ryan';
}
change()
alert(me) // jaime
还值得一提的是,在使用前声明变量(未初始化)并没有实际的性能好处,只是不用担心。我不知道javascript内存管理(除了在几乎所有情况下都不应该关心它),但是定义变量最常见的原因是定义它的范围
在您的示例中,您已经在两个函数中的变量前面写入了var
。这意味着这些变量仅在该函数内具有作用域。(因此它与函数外部的“我”不同)
但是,如果将var
从这两个函数中保留,则这两个函数将共享同一个变量
比如说
var lock;
function doSomething() {
lock = true;
// do something
}
function doSomethingElse() {
if (lock) .. else ..
}
doSomething和doSomethingElse函数都使用相同的锁变量
回答你的问题:
使用这样的变量是一种好的做法吗?在什么情况下,声明变量而不初始化变量是有用的或首选的
我认为上面的例子是一个完全可以接受的例子。像这样使用“全局变量”是一种糟糕的编程模式,但如果您正在编写一个简单的脚本,那么为什么不呢。我不知道javascript内存管理(除了在几乎所有情况下您确实不应该关心它……),但定义变量最常见的原因是定义它的范围
在您的示例中,您已经在两个函数中的变量前面写入了var
。这意味着这些变量仅在该函数内具有作用域。(因此它与函数外部的“我”不同)
但是,如果将var
从这两个函数中保留,则这两个函数将共享同一个变量
比如说
var lock;
function doSomething() {
lock = true;
// do something
}
function doSomethingElse() {
if (lock) .. else ..
}
doSomething和doSomethingElse函数都使用相同的锁变量
回答你的问题:
使用这样的变量是一种好的做法吗?在什么情况下,声明变量而不初始化变量是有用的或首选的
我认为上面的例子是一个完全可以接受的例子。使用“全局变量”本身是一种糟糕的编程模式,但如果您正在编写一个简单的脚本,那么为什么不呢。声明一个变量,但不初始化它取决于程序员和具体情况。这是一个非常广泛的主题。可能发生这种情况的一个例子是,如果需要对元素进行全局引用。在初始化变量之前,必须加载文档,但首先需要声明它
var canvas;
function onLoad()
{
canvas = document.getElementById("myCanvas");
}
但是,如果您是在本地讨论,那么这一切都取决于程序员。声明变量而不是初始化变量取决于程序员和具体情况。这是一个非常广泛的主题。可能发生这种情况的一个例子是,如果需要对元素进行全局引用。在初始化变量之前,必须加载文档,但首先需要声明它
var canvas;
function onLoad()
{
canvas = document.getElementById("myCanvas");
}
但是,如果你说的是本地的话,这又一次完全取决于程序员。这太宽泛了,太主观了;这取决于什么是t