js函数的变量值,范围

时间:2017-01-13 12:07:53

标签: javascript variables scope local

我在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? 谢谢你的帮助

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:1)

在全局执行上下文中,变量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);