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

时间:2014-07-30 06:57:43

标签: javascript variables

目前我正试图围绕用例声明Javascript变量但不立即初始化它。我知道声明一个变量会将内存存储/留出该变量以备将来使用,但是声明变量而不是立即初始化它有什么意义呢?

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

var me;

function firstMe(){
  var me = "Ryan";
  //do something...
}

function secondMe(){
 var me = "Bob";
 //do something...
}

使用像这样的变量是一种好习惯吗?声明变量而不是初始化变量的情况有哪些?

4 个答案:

答案 0 :(得分:3)

首先,它始终初始化为undefined

var a;
a === undefined; // true
var b = undefined; // exact same thing

现在,由于语言类型很弱,当undefined变量没有设置内存供将来使用时,因为它不知道你将如何使用它,直到你为它分配一些东西

至于什么时候宣布但不是初始化,那么这非常特定于你的需求和限制;例如,一种常见的技术(处理javascript全局范围的细微差别)是在函数开头声明你需要的所有变量,因此如果忘记用户{{{},它们不会无意中转到全局范围。 1}}:

var

这被视为良好做法

并且澄清一下,在您的示例中,您在每个函数中声明var a, b, c; // some code a = 1 // since it was declared at the beginning, this will stay in local scope ,实际上在本地范围内创建了一个新变量,因此您不会更改全局范围;例如,请使用以下代码:

var me

在使用(未初始化)之前声明变量的没有实际性能优势也可能值得补充,只是不用担心。

答案 1 :(得分:1)

如果你重新宣布" var me"在你的功能中,这些变量不会是全局的。你宁愿这样做:

var me;

function firstMe(){
  me = "Ryan";
  //do something...
}

function secondMe(){
 me = "Bob";
 //do something...
}

答案 2 :(得分:1)

声明变量但不初始化它取决于程序员和情况。这是一个非常广泛的主题。可能发生的一个例子是是否需要对元素的全局引用。在初始化变量之前必须加载文档,但需要先声明它。

var canvas;
function onLoad()
{
    canvas = document.getElementById("myCanvas");
}

但是,如果你在本地谈论再次,那完全取决于程序员。

答案 3 :(得分:0)

我不了解javascript内存管理(除了你几乎在所有情况下都不应该关心它),但定义变量的最常见原因是定义它的范围

在您的示例中,您已在两个函数内部的变量前面写了var。这意味着这些变量仅在该函数内部具有范围。 (所以它不一样"我和#34;在函数之外)。

如果您从两个函数中退出var,则这两个函数将共享相同的变量。

例如

var lock;

function doSomething() {
    lock = true;
    // do something
}

function doSomethingElse() {
    if (lock) .. else ..
}  

doSomething和doSomethingElse函数都使用相同的锁变量。

回答你的问题:

  

使用像这样的变量是一种好习惯吗?声明变量而不是初始化变量的情况有哪些?

我认为上面的例子是一个完全可以接受的例子。使用"全局变量"因为这是糟糕的编程范式,但如果你正在做一个简单的脚本,那么为什么不呢。