【问题标题】:In Javascript (when using node.js), how do you know/define the scope of variables?在 Javascript(使用 node.js 时)中,您如何知道/定义变量的范围?
【发布时间】:2011-09-14 14:19:28
【问题描述】:

如果我在传递的函数中定义了一些东西,例如

var name = "Whatever";

现在可以从应用程序的其他部分访问,还是受到限制?在 node.js javascript 中定义范围背后的逻辑是什么?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    name 变量仅在创建它的函数中可用,或在嵌套在该函数内部的函数中。

    无论函数在哪里传递,这都是正确的。它的原始变量环境随身携带,任何外部该环境的代码都无法访问name

    【讨论】:

      【解决方案2】:

      如果您使用var,则方法中定义的任何变量仅在该方法中可用。如果你这样做了

      myVar = 1;

      myVar 将是全局的。

      Node 就像其他的 javascript。 Node 确实定义了一个 global 变量,所以你可以这样做

      global.SOME_CONSTANT = 'A Constant'

      然后像这样使用

      SOME_CONSTANT

      您的代码/模块中的任何位置。

      因为节点是异步的,你最终会定义很多回调。即你做了很多

      someModule.someMethod(opts, function(data){
         // callback code in here
      });
      

      你传入的函数在完成后被someMethod 调用。假设您在函数中调用了someModule.someMethod。如果您在该外部函数中定义了一个变量,那么您的代码看起来像

      var x = [];
      someModule.someMethod(opts, function(data){
         // x is available in this callback because of closures, so you can do
         x.push(data);
      });
      

      由于闭包,外部作用域中定义的变量在回调中可用。我建议您花一些时间阅读有关 javascript 中的闭包。

      【讨论】:

        【解决方案3】:

        它只在模块中可用,并且只在它定义的函数中可用。 没有办法定义范围。每个模块都有自己的全局范围。

        你应该阅读闭包;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 2017-11-10
          • 2013-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多