Javascript 检查变量是否已设置无效
我试图最初设置一个变量,但前提是该变量尚未设置。出于某种原因,我用来确定变量是否已设置的逻辑似乎在运行,甚至与变量是否已设置无关 我的代码是Javascript 检查变量是否已设置无效,javascript,if-statement,initialization,undefined,Javascript,If Statement,Initialization,Undefined,我试图最初设置一个变量,但前提是该变量尚未设置。出于某种原因,我用来确定变量是否已设置的逻辑似乎在运行,甚至与变量是否已设置无关 我的代码是 var l0 = -210; function add(){ var lThis; if (lThis == null){ lThis = l0; console.log('set lThis to '+ lThis); } lThis ++; } var incrementInterval = setInterva
var l0 = -210;
function add(){
var lThis;
if (lThis == null){
lThis = l0;
console.log('set lThis to '+ lThis);
}
lThis ++;
}
var incrementInterval = setInterval(add, 33);
每次间隔运行时,控制台都会记录“将lThis设置为-210”,因此“if(lThis==null)”似乎什么也没做
请参见
l在您的示例中,此
是一个局部变量。因此,每次调用函数add()
,都会将lThis
重新初始化为undefined
,您将永远无法访问lThis++
。您可能想将此移到add()之外
:
l在您的示例中,此
是一个局部变量。因此,每次调用函数add()
,都会将lThis
重新初始化为undefined
,您将永远无法访问lThis++
。您可能想将此移到add()之外
:
您的变量
l此
是一个局部变量,它仅存在于函数add()的范围内(每次都创建)。
如果您想在<代码> SET间隔(…)/代码>期间保存<代码> LIST<代码>,您应该考虑将其移动到全局范围:
var lThis = null;
function add() {
if (lThis == null) {
lThis = -210
console.log('set lThis to '+ lThis);
}
lThis++;
}
您的变量l此
是一个局部变量,它仅存在于函数add()的范围内(每次都创建)。
如果您想在<代码> SET间隔(…)/代码>期间保存<代码> LIST<代码>,您应该考虑将其移动到全局范围:
var lThis = null;
function add() {
if (lThis == null) {
lThis = -210
console.log('set lThis to '+ lThis);
}
lThis++;
}
l此
是一个局部变量。当调用add()
时,此变量将每隔33毫秒重置为“null”
另一个全局变量呢,比如:
var l0 = -210;
var lThis;
function add() {
if (lThis == null) {
lThis = l0;
.......
l此
是一个局部变量。当调用add()
时,此变量将每隔33毫秒重置为“null”
另一个全局变量呢,比如:
var l0 = -210;
var lThis;
function add() {
if (lThis == null) {
lThis = l0;
.......
使用setInterval函数,从开始每33毫秒执行一次add,然后重新创建整个函数范围,包括lThis。我想您想要实现的是在函数中对lThis的每次调用中添加1。实现这一点的方法之一是通过以下方式使用闭包:
var l0 = -210;
function thunkAdd(){
var lThis = l0;
console.log('set lThis to '+ lThis);
return function inc() {
console.log(lThis);
return lThis ++;
}
}
var incrementInterval = setInterval(thunkAdd(), 33);
注意,这是编写JavaScript的旧方法,使用新的ES6语法,可以以更紧凑的形式实现:
const l0=-210;
function *add() {
let lThis = l0;
while (true) yield lThis++;
}
const lAdd = add()
const incrementInterval = setInterval(() => {console.log(lAdd.next())}, 33);
使用setInterval函数,从开始每33毫秒执行一次add,然后重新创建整个函数范围,包括lThis。我想您想要实现的是在函数中对lThis的每次调用中添加1。实现这一点的方法之一是通过以下方式使用闭包:
var l0 = -210;
function thunkAdd(){
var lThis = l0;
console.log('set lThis to '+ lThis);
return function inc() {
console.log(lThis);
return lThis ++;
}
}
var incrementInterval = setInterval(thunkAdd(), 33);
注意,这是编写JavaScript的旧方法,使用新的ES6语法,可以以更紧凑的形式实现:
const l0=-210;
function *add() {
let lThis = l0;
while (true) yield lThis++;
}
const lAdd = add()
const incrementInterval = setInterval(() => {console.log(lAdd.next())}, 33);
不管它值多少钱,我认为您的整个代码片段都需要戏剧性地重写
函数添加(x){
console.log(x)
设置超时(添加,33,x+1)
}
让timeout=add(-210)
我认为您的整个代码片段需要戏剧性地重写
函数添加(x){
console.log(x)
设置超时(添加,33,x+1)
}
让timeout=add(-210)
这对增加变量非常有帮助。我有一个后续的我张贴在。也许你会有一些见解,这对增加变量很有帮助。我有一个后续的我张贴在。可能您会对此有所了解。lThis是add函数的本地变量名,每次调用该函数时都会初始化和/或重新声明。为了避免复杂性,您还可以在全球范围内声明lThis。-而且,您永远不会将文本与null进行比较,除非您在以后的代码中手动或故意地将其句柄置零,以便重置其值。即使如此,将假定带有文字值的变量置零也是错误的。这是add函数的局部变量名,每次调用该函数时都会初始化和/或重新声明。为了避免复杂性,您还可以在全球范围内声明lThis。-而且,您永远不会将文本与null进行比较,除非您在以后的代码中手动或故意地将其句柄置零,以便重置其值。即使如此,将一个应该携带文字值的变量置零也是错误的。