【问题标题】:Any way to access local scope variable in outer scope in Javascript?有什么方法可以在Javascript中访问外部范围内的局部范围变量?
【发布时间】:2015-09-13 12:41:53
【问题描述】:

有什么方法可以在不创建对象或不使用'this'的情况下使局部范围变量在外部范围内可访问?

说,

function foo(){
  var bar = 10;

}

有什么方法可以让变量 'bar' 在函数 'foo' 范围之外可用?

【问题讨论】:

  • 如果您不希望该变量是该函数的本地变量,请在函数外部定义它...
  • 这对我来说没有多大意义。本地范围被设计为本地范围,为什么您希望它成为任何其他范围的一部分?
  • 这是一个面试问题,在某些情况下可以通过任何方式使其在外部范围内可用。
  • 您可以将其提供给外部范围,但它不再是本地的。

标签: javascript


【解决方案1】:

没有。简直不能。 范围就是范围。如果你想在外面访问,让它在外面声明并使用它。

事情就是这样设计的。我不建议任何糟糕的方法来实现它。

【讨论】:

    【解决方案2】:

    将值分配给window 对象的属性:

    function foo(){
        window.bar = 10;
    }
    
    console.log(window.bar); //10
    

    编辑:

    既然你不能接受他的回答,那么不——你所要求的是不可能的。唯一的解决办法是在全局范围内声明变量,然后再初始化。

    【讨论】:

    • 在不改变 'var bar = 10' 的情况下寻找任何答案。这是一道面试题。
    • 那么这是不可能的......你必须将该值分配给已经在全局范围内声明的变量......
    • @Nimmy 测试你的信心水平 :) 你应该说不可能先生 ;)
    • @Suresh atta :) 是的,我做到了,但只是想检查一下我是否正确,
    • 实际上,如果这是一个面试问题,那么@sᴜʀᴇsʜᴀᴛᴛᴀ 的答案就是正是他们正在寻找的。您应该解释然后增强的重要词是“范围”,而不仅仅是说这是不可能的。他们正在寻找理解为什么可以解释它的人。所以 blah blah 与其他语言不同,JavaScript 具有函数作用域而不是块作用域,并且局部变量在其函数之外不可用,尽管 JS 的新版本(ES2016 或现在称为的任何东西)也具有块作用域等。
    【解决方案3】:

    你不能在函数外访问局部变量。

    以下帖子可能会帮助您更详细地了解范围 -

    What is the scope of variables in JavaScript?

    【讨论】:

      【解决方案4】:

      你可以这样做:

      var myScopedVariables = function foo(){
          var bar = 10;
          return [bar];
      } 
      console.log(myScopedVariables);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-01
        • 2012-01-11
        • 2016-06-23
        • 2016-01-01
        • 1970-01-01
        • 2022-06-12
        相关资源
        最近更新 更多