Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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_If Statement_Initialization_Undefined - Fatal编程技术网

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进行比较,除非您在以后的代码中手动或故意地将其句柄置零,以便重置其值。即使如此,将一个应该携带文字值的变量置零也是错误的。