我有一个javascript函数如下:
function modifyx(xvalue) {
val = 1;
for (x = 0; x < 10; x++) {
val = val + 1;
}
return val;
}
&#13;
主片段将名为x的变量传递给上面的函数,如下所示:
for (x = 0; x < 10; x++) {
console.log(modifyx(x));
}
&#13;
预期的输出应该是&#34; 11&#34;打印10次,但它打印一次。函数调用会更改x的值,尽管我没有修改传递的值。函数中的x具有自己的范围。然而它被修改了。对此的任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
代码中的变量x
为global
。当您的方法modifyx(xvalue)
第一次返回时,x
的值已经是11,这在第二次迭代的for循环中使用。因此,它无法进一步执行该方法。
在let x
的声明中使用for (x = 0; x < 10; 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));
}
&#13;
答案 1 :(得分:2)
将var放在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作为全局变量。
答案 2 :(得分:0)
关于JavaScript中变量作用域的MDSN文档:
JavaScript有两个范围:全局和本地。一个变量 在函数定义之外声明的是一个全局变量及其 在整个程序中,值是可访问和可修改的。一个变量 在函数定义中声明的是本地的。它被创造了 并在每次执行函数时销毁
使用#include<stdio.h>
int getnum(int num);
int breaksquaresum(int num);
int main()
{
while(1){
printf("Enter a number to check whether Happy Or Not \n");
int k;
scanf("%d",&k);
int indicator= breaksquaresum(k);
if(indicator == 1){
printf("Number %d is Happy\n",k);
}
else{
printf("Number %d is Not Happy!!\n",k);
}
}
}
int breaksquaresum(int num)
{
printf("%d num\n",num);
int sum=0,rem;
while(num!=0){
rem=num%10;
sum=sum+(rem*rem);
printf("Sum %d\n",sum);
num=num/10;
}
if(sum<10 && sum==1 || sum==7)
return 1;
if(sum<10 && sum!=1 && sum!=7 )
return 0;
breaksquaresum(sum);
}
关键字时,变量声明会被拉到其范围(函数)的顶部。
在您的示例代码中,您使用for循环而不是定义var
。当您使用var x
时,浏览器假设您的意思为for (x = 0...
,因此它会创建一个名为x的全局变量。
在您的函数for (var x = 0...
中,您要在执行结束时将全局 modifyx
设置为11。这导致外部循环只运行一次,因为在第一次循环后x不再小于10。
以下是评论内容的示例:
x
一个简单的解决方案是在两个循环中使用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