Javascript 起重吊装
在我的代码中,x值是未定义的。如果删除Javascript 起重吊装,javascript,Javascript,在我的代码中,x值是未定义的。如果删除If块,则x值显示为77。我不明白为什么如果块正在修改x值 var x=77; 函数fn(){ if(false){ var x=55; } 控制台日志(x); } fn()只需删除if语句中的var。这将解决起重问题 var x = 77; function fn() { if(false) { x = 55; } console.log(x); // 77 } fn(); 在函数范围内,变量x被提升到顶部,
If
块,则x值显示为77。我不明白为什么如果块正在修改x值
var x=77;
函数fn(){
if(false){
var x=55;
}
控制台日志(x);
}
fn()
只需删除if语句中的var
。这将解决起重问题
var x = 77;
function fn() {
if(false) {
x = 55;
}
console.log(x); // 77
}
fn();
在函数范围内,变量x被提升到顶部,如下所示var x
如果您打印它,您将得到未定义的
。它从未被分配变量,因为它没有进入if块
var x=77;
函数fn(){
if(false){
var x=55;
}
console.log(x);//取消查找
}
fn()代码>在函数内部重新声明和提升x变量,但从未设置,因为永远不会达到if(false)
,因此未定义
。如果删除内部声明,则函数内部已知外部x
这可以通过使用const
或let
(ES6)而不是var
来解决const
和let
未吊装,仅在声明的支架内:
const x = 77;
function fn() {
if (false) {
const x = 55;
}
console.log(x); // 77
}
fn()
另一种解决方案是只使用两个不同的变量名,或者根据需要删除if语句中的var…您也可以使用let关键字
let x = 77;
function fn() {
if (false) {
let x = 55;
}
console.log(x); // 77
}
fn()
在分配变量时,应该使用wither ES6定义语法const或let,如果需要改变变量,则使用let,否则使用const,停止使用var。
在您的场景中,当在那里使用var时,这意味着您试图重新初始化x,它将被提升
var x=77;方法
var x;在街区外。
因此不需要重新初始化x,只需传递值或使用let或const即可
function fn() {
if (false) {
//
x = 55;
}
console.log(x);
}
fn();
通过使用var
关键字,您已将其作为函数范围内的局部变量。由于提升,该变量存在,但由于if条件不为true,因此未指定值。