javascript - js 函数中的变量值来自哪个作用域

标签 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,而不是前一个的值 block ,其中 x = 7? 感谢您的帮助

最佳答案

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

此外,您可以删除最后一个 block 的括号,因为 JS 中没有 block 作用域(实际上 block 作用域是通过 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);

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

关于javascript - js 函数中的变量值来自哪个作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41634332/

相关文章:

javascript - 为什么 Javascript addEventListener 会更改对象指针的范围?

string - 使用 PowerShell 4.0 从变量输入中删除空格

在 C 中更改线程中的变量

c++ - 在 C++ 函数中使用多个作用域 block

javascript - bool 值可以与字符串进行比较吗

javascript - 为什么在更新 DOM 元素的样式属性时对象展开失败但 Object.assign 成功?

javascript - 使用 ng-model 和 select 来显示数据属性而不是值?

Javascript 性能 : Variable vs Large object's attribute

javascript - javascript 中的作用域问题

javascript - 将 Controller 中的参数范围函数分配给指令中的 var