javascript - 为什么变量值要传递到这里

标签 javascript scope

我用两个函数 a()b() 编写了以下代码。

函数a()有一个循环,如下所示,在该循环内它调用函数b()。问题是第一个函数的循环计数器从 b() 获取其值,然后停止。两个函数之间没有传递任何值,它们唯一的共同点是变量的名称。

谁能解释一下这里到底发生了什么?

根据我的理解,它们都应该有自己的 x 副本,除非我声明 x 是全局的。

http://jsfiddle.net/rahulkadukar/s2gs9j05/

a();

function a() {
    for (x = 0; x < 4; x++) {
        console.log(x); 
        b();
        console.log(x);
     }
}

function b(){
    for (x = 0; x < 4; x++) {
        //Do nothing 
    }
}

上述函数的输出为

0
4

最佳答案

由于您没有使用 var 关键字将变量声明为局部变量,因此它们是全局变量。所以这两个函数都使用相同的变量x。将其更改为:

for (var x = 0; x < 4; x++)

它们将是每个函数中的局部变量。

关于javascript - 为什么变量值要传递到这里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696663/

相关文章:

c++ - 指向全局结构变量

javascript - 返回两个嵌套对象之间的差异

javascript - 简单的表单提交 Angular 和 Firebase

javascript - 查询搜索两次返回相同的结果

javascript - 编写函数的不同方式会在 JavaScript 中带来不良影响吗?

javascript - 如何在 React 的并行组件中调用函数?

javascript - 变量是否更新为 "by reference"?

javascript - 如何将 Razor boolean 变量传递给 Angular 指令?

javascript - 在函数内将变量插入 $.post

css - 我们可以将 CSS 关键帧动画限制在一个范围内吗