变量与内部功能相同的名称改变
我有如下JavaScript函数的传递的参数的值:变量与内部功能相同的名称改变
function modifyx(xvalue) { val = 1;
for (x = 0; x < 10; x++) {
val = val + 1;
}
return val;
}
和主代码段通过一个名为x于上述函数的变量如下图所示:
for (x = 0; x < 10; x++) { console.log(modifyx(x));
}
预期输出应该打印10次“11”,而是打印一次。尽管我没有修改传入的值,函数调用会更改x事件的值。函数内部的x有它自己的范围。但它会被修改。任何帮助,将不胜感激。
回答:
代码中的变量x
是global
。当您的方法modifyx(xvalue)
第一次返回时,x
的值已经是11,用于第二次迭代的for循环中。因此它无法进一步执行该方法。
在for (x = 0; x < 10; x++)
的声明中使用let x
来创建唯一的执行环境。
function modifyx(xvalue) { val = 1;
for (x = 0; x < 10; x++) {
val = val + 1;
}
return val;
}
for (let x = 0; x < 10; x++) {
console.log(modifyx(x));
}
回答:
只要把变种在这两个地方在for循环
function modifyx(xvalue) { val = 1;
for (var x = 0; x < 10; x++) {
val = val + 1;
}
return val;
}
for (var x = 0; x < 10; x++) {
console.log(modifyx(x));
}
,因为其采取X为你的代码的全局变量。可变范围
回答:
MDSN文档中的JavaScript:
JavaScript有两个作用域:全局和局部。在函数定义之外声明的变量 是一个全局变量,其值 可在整个程序中访问和修改。在函数定义中声明的变量 是本地的。它创建 和销毁每次函数执行
当使用关键字var
时间,它的范围(功能)的变量声明被拉到顶部。
在您的示例代码中,您使用的for循环没有定义var x
。当您使用for (x = 0...
时,浏览器假定您的意思是for (var x = 0...
,因此它会创建一个名为x的全局变量。
在你的函数modifyx
中,你将globalx
设置为11执行结束。这会导致外循环只运行一次,因为在第一次循环后x不再小于10。
这是怎么回事带注释的例子:
function modifyx(xvalue) { val = 1;
for (x = 0; x < 10; x++) { // sets the global 'x' to 11 after loop finishes
val = val + 1;
}
return val;
}
// 'x' is being defined as a global variable
for (x = 0; x < 10; x++) {
console.log(modifyx(x)); // modifyx sets 'x' to 11
// x is now 11, loop will now quit
}
一个简单的解决方案是使用let
关键字在这两个循环,从而限制范围。
for (let x = 0; x < 10; x++) { ... }
以上是 变量与内部功能相同的名称改变 的全部内容, 来源链接: utcz.com/qa/259505.html