变量与内部功能相同的名称改变

我有如下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有它自己的范围。但它会被修改。任何帮助,将不胜感激。

回答:

代码中的变量xglobal。当您的方法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

回到顶部