【问题标题】:js variable value in a function from which scope [duplicate]js变量值在哪个范围的函数中[重复]
【发布时间】:2017-05-28 19:25:01
【问题描述】:

我在 java 脚本中有这段代码

var x = 5;
function f(y) { return (x + y) - 2 };
function g(h) { var x = 7; return h(x) };
{ var x = 10; z = g(f) };

z 值为 15。为什么? 表达式 (x+y)-2 被计算为 (10+7)-2。 为什么 x 得到 10 的值,而不是前一个的值 块,其中 x = 7? 感谢您的帮助

【问题讨论】:

  • 你最后有一个不寻常的块......
  • 您的代码缺少分号。
  • @mike Oh cmon...我把所有的脑力都花在了写答案上,而你抄袭了这个问题??
  • 对不起!我不知道其他帖子。

标签: javascript variables scope local


【解决方案1】:

您可以完全删除第一个作业。在您致电 g(f) 之前,它会被覆盖。

另外,你可以删除最后一个块的括号,因为 JS 中没有块作用域(实际上块作用域是由 let 引入的,所以你想改用它)。

var x = 5;

function f(y) { 
    // global variable x is 10 -> 10 + 7 - 2 = 15
    return (x + y) - 2; 
}

function g(h) { 
    // x gets declared locally - local value will be used
    var x = 7;   
    return h(x); // f gets called with y = 7
}

x = 10; //global x gets changed
z = g(f);

...并且始终放置分号。尽管它们可能看起来是可选的,但在某些情况下它们是强制性的。

【讨论】:

    【解决方案2】:

    在全局执行上下文中变量 x 的值为 10。 当函数 f 最终被调用为参数 y 的值时,这个 y 实际上代表了函数 g 本地执行上下文中 x 的值,这里 x 为 7。

           var x = 5;
            function f(y) {
             return (x + y) - 2 ;  
              }; // value of global var x is 10, value of parameter passed is 7
                // this value comes from the local var x of g function's  execution context.
    
            function g(h) { 
            var x = 7; return h(x); };
    
           { var x = 10; z = g(f); };
    
           console.log(z);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多