【问题标题】:What is the scope of json variable outside the function in nodejs?nodejs中函数外的json变量的范围是什么?
【发布时间】:2020-07-17 14:06:13
【问题描述】:

考虑下面的代码sn-p,

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

这里 json 不应该给出正确的值,因为它的范围已经结束,但我实际上可以得到 json 值。谁能告诉我这是如何工作的?

【问题讨论】:

  • 您的代码没有任何意义,因为它不是合法的 Javascript。您的函数没有名称或任何执行方式。您没有显示该函数的任何调用者。而且,console.log(json) 会创建一个箭头,因为该范围内没有 json 变量。请将您的示例清理为可以实际运行的内容,以便我们知道您要询问的内容。

标签: node.js json scope


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多