Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中声明变量但不初始化它_Javascript_Variables - Fatal编程技术网

在Javascript中声明变量但不初始化它

在Javascript中声明变量但不初始化它,javascript,variables,Javascript,Variables,目前,我正试图将注意力集中在声明Javascript变量而不是立即初始化它的用例上。我知道声明变量将为该变量存储/留出内存以备将来使用,但是声明变量而不立即初始化它有什么意义呢 我的第一个想法是在一个用例中声明一个变量用于多个函数,或者用于创建多个对象,如下所示: var me; function firstMe(){ var me = "Ryan"; //do something... } function secondMe(){ var me = "Bob"; //do so

目前,我正试图将注意力集中在声明Javascript变量而不是立即初始化它的用例上。我知道声明变量将为该变量存储/留出内存以备将来使用,但是声明变量而不立即初始化它有什么意义呢

我的第一个想法是在一个用例中声明一个变量用于多个函数,或者用于创建多个对象,如下所示:

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