我很好奇为什么变量在被定义为全局变量时被认为是空白的。
var name = "Richard";
function showName(){
if(name){ // the name is already defined as global variable but why the condition is false ?
var name="Jack";
console.log(name);
}
}
showName() // its blank
console.log(name); //display Richard
如果我将if(name)
的陈述更改为if(!name)
,那么它会按预期工作。为什么"名称"返回空白,因为它已经有一个用值定义的全局变量。
我只是想了解JavaScript。我正在学习它。
答案 0 :(得分:4)
这是因为您已将name
声明为函数的局部变量,shadowing为全局name
变量。
在闭包中用var
声明变量的任何地方,它都会根据名称创建和hoists一个局部变量,初始值为undefined
(假值,所以如果块没有运行。)
删除var
中的var name="Jack";
,您只需要var
来声明变量,而不是重新分配变量。
var name = "Richard";
function showName(){
if(name){
name="Jack";
console.log(name);
}
}
showName()
console.log(name);