nodejs函数外部的json变量的作用范围是什么?

时间:2020-07-17 14:06:13

标签: node.js json scope

考虑以下代码片段,

 function(){
    if(condition){
      var json = { "stat":"success","count":"3" };
    }
 }
 console.log(json);
 return json;

这里json不应给出正确的值,因为它的作用域已经结束,但是我实际上可以得到json值。谁能告诉我这是怎么回事?

1 个答案:

答案 0 :(得分:0)

如果您的意思是这样的(实际运行的代码):

 function test(){
    if(condition){
      var json = { "stat":"success","count":"3" };
    }
    console.log(json);
    return json;
 }

 test();

您正在使用varvar创建一个具有函数作用域而不是块作用域的变量。因此,您的代码与此等效:

 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();

如果您使用letconst而不是var,则您的变量将处于块范围内,这将产生错误:

 function test(){
    if(condition){
      let json = { "stat":"success","count":"3" };
    }
    console.log(json);
    return json;
 }

 test();

因为用jsonconst声明的let变量仅在创建它的块范围内可用,并且console.log(json)和{{1} }都会在尝试引用不再存在的变量时产生错误。