考虑以下代码片段,
function(){
if(condition){
var json = { "stat":"success","count":"3" };
}
}
console.log(json);
return json;
这里json不应给出正确的值,因为它的作用域已经结束,但是我实际上可以得到json值。谁能告诉我这是怎么回事?
答案 0 :(得分:0)
如果您的意思是这样的(实际运行的代码):
function test(){
if(condition){
var json = { "stat":"success","count":"3" };
}
console.log(json);
return json;
}
test();
您正在使用var
。 var
创建一个具有函数作用域而不是块作用域的变量。因此,您的代码与此等效:
function test(){
var json = undefined; // variable is function scoped
if(condition){
json = { "stat":"success","count":"3" };
}
console.log(json); // can access here, may have undefined value
return json;
}
test();
如果您使用let
或const
而不是var
,则您的变量将处于块范围内,这将产生错误:
function test(){
if(condition){
let json = { "stat":"success","count":"3" };
}
console.log(json);
return json;
}
test();
因为用json
或const
声明的let
变量仅在创建它的块范围内可用,并且console.log(json)
和{{1} }都会在尝试引用不再存在的变量时产生错误。