目前我正试图围绕用例声明Javascript变量但不立即初始化它。我知道声明一个变量会将内存存储/留出该变量以备将来使用,但是声明变量而不是立即初始化它有什么意义呢?
我的第一个想法是一个用例,你想要声明一个变量用于多个函数,或创建多个对象,如下所示:
var me;
function firstMe(){
var me = "Ryan";
//do something...
}
function secondMe(){
var me = "Bob";
//do something...
}
使用像这样的变量是一种好习惯吗?声明变量而不是初始化变量的情况有哪些?
答案 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函数都使用相同的锁变量。
回答你的问题:
使用像这样的变量是一种好习惯吗?声明变量而不是初始化变量的情况有哪些?
我认为上面的例子是一个完全可以接受的例子。使用"全局变量"因为这是糟糕的编程范式,但如果你正在做一个简单的脚本,那么为什么不呢。