Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 if语句中的变量重新分配未引发错误_Javascript_Node.js - Fatal编程技术网

Javascript if语句中的变量重新分配未引发错误

Javascript if语句中的变量重新分配未引发错误,javascript,node.js,Javascript,Node.js,为什么下面的代码没有抛出关于变量重新赋值的警告/错误 由于后面的逗号,我花了很多时间调试类似的东西 当else语句中的代码移到if范围之外时,它会抛出正确的错误 任何解释都很好 if(false){ //没什么 }否则{ 常数b=100, a=10 } 控制台日志(a) //未定义的在这种情况下,因为它从未进入else语句,所以它总是false 我通常使用警报(字符串);要调试并了解变量的值,请在if开头尝试一个变量,或者使用console.log() 我还建议您阅读以下有关let或var的

为什么下面的代码没有抛出关于变量重新赋值的警告/错误

由于后面的逗号,我花了很多时间调试类似的东西

当else语句中的代码移到if范围之外时,它会抛出正确的错误

任何解释都很好


if(false){
//没什么
}否则{
常数b=100,
a=10
}
控制台日志(a)

//未定义的
在这种情况下,因为它从未进入else语句,所以它总是false

我通常使用警报(字符串);要调试并了解变量的值,请在if开头尝试一个变量,或者使用console.log()

我还建议您阅读以下有关let或var的内容:
.

在这种情况下,因为它从未进入else语句,所以它总是错误的

我通常使用警报(字符串);要调试并了解变量的值,请在if开头尝试一个变量,或者使用console.log()

我还建议您阅读以下有关let或var的内容:

因此,在代码中,您正在创建另一个变量
a
,它是常量。一旦作用域结束,它将再次指向外部的
a

例如,如果您尝试在同一块中重新分配它,它将抛出错误,因为您无法更改const的值


if(false){
//没什么
}否则{
常数b=100,
a=10
a=2;
}
控制台日志(a)

//未定义的
Let
const
变量不被提升,而是在块范围内创建的

因此,在代码中,您正在创建另一个变量
a
,它是常量。一旦作用域结束,它将再次指向外部的
a

例如,如果您尝试在同一块中重新分配它,它将抛出错误,因为您无法更改const的值


if(false){
//没什么
}否则{
常数b=100,
a=10
a=2;
}
控制台日志(a)

//未定义的
在else条件中,a被重新声明为常量。因此,无论在else条件中的值(u赋值为10)是什么。你必须把;在b声明的末尾。否则,
a
将被声明为常量。因此,
a
值在exterofelse条件中未定义。

if(false){
//没什么
}否则{
常数b=100;
a=10
}

log(a)
在else条件下,a被重新声明为常量。因此,无论在else条件下的值(u赋值为10)是什么。你必须把;在b声明的末尾。否则,
a
将被声明为常量。因此,
a
值在exterofelse条件中未定义。

if(false){
//没什么
}否则{
常数b=100;
a=10
}
console.log(a)
为什么代码没有抛出关于变量重新赋值的警告/错误

因为您没有重新分配变量(这是您实际想要的,请分配
let a
变量),所以您是用
常量和另一个范围(在本例中是
else
块)来声明它。如果您在同一范围内重新声明了它(例如,让a;const a=5
),它确实会抛出一个错误。内部作用域中的隐藏声明(隐藏现有名称)不是错误,事实上,本地作用域必须工作且不受其周围环境的影响

如果您想得到关于此的警告,请使用具有禁止阴影声明规则的linter,例如

为什么代码没有抛出关于变量重新赋值的警告/错误

因为您没有重新分配变量(这是您实际想要的,请分配
let a
变量),所以您是用
常量和另一个范围(在本例中是
else
块)来声明它。如果您在同一范围内重新声明了它(例如,让a;const a=5
),它确实会抛出一个错误。内部作用域中的隐藏声明(隐藏现有名称)不是错误,事实上,本地作用域必须工作且不受其周围环境的影响


如果您希望得到有关此的警告,请使用具有禁止隐藏声明规则的linter,例如..

,因为您正在创建块范围变量
const b=100;/*分号*/a=10
将在您定义的范围内重新分配变量,因为您正在创建块范围变量
const b=100;/*分号*/a=10
将在您定义的范围内重新分配变量,使其精确。@Bergi Yup。我猜它被称为暂时的死区,但不确定。但我喜欢坚持这句话,因为它使解释清晰而简单。加上这一点,每个人都很难理解和理解。我将添加参考,但要精确,@Bergi Yup。我猜它被称为暂时的死区,但不确定。但我喜欢坚持这句话,因为它使解释清晰而简单。加上这一点,每个人都很难理解和理解。我将在if语句为false的so code execute else分支中添加引用thoughcondition if语句为false的so code execute else分支中的条件