Javascript 为什么第一个console.log()打印未定义的值,而第二个打印已转换的值
为什么第一个console.log()打印未定义的值,而第二个打印已转换的值?我知道它必须与函数作用域有关,但不能得到它Javascript 为什么第一个console.log()打印未定义的值,而第二个打印已转换的值,javascript,Javascript,为什么第一个console.log()打印未定义的值,而第二个打印已转换的值?我知道它必须与函数作用域有关,但不能得到它 var数组=[1,2,3,4,5,7]; 函数递增1(arr){ arr=arr.map(函数(值、索引、数组){ arr[index]=arr[index]+1; }); 控制台日志(arr); } 递增1(数组); console.log(数组); //[未定义,未定义,未定义,未定义,未定义,未定义] //[2,3,4,5,6,8]您需要从映射内的函数返回递增的值。使
var数组=[1,2,3,4,5,7];
函数递增1(arr){
arr=arr.map(函数(值、索引、数组){
arr[index]=arr[index]+1;
});
控制台日志(arr);
}
递增1(数组);
console.log(数组);
//[未定义,未定义,未定义,未定义,未定义,未定义]
//[2,3,4,5,6,8]
您需要从映射内的函数返回递增的值。使用返回arr[index]+1
您还需要返回使用map形成并存储在arr中的新数组
var数组=[1,2,3,4,5,7];
函数incrementByOne(arr){//包含数组引用
arr=arr.map(函数(值、索引、数组){
返回值+1;
});
//现在,arr包含一个新数组,不再引用传递的数组。
控制台日志(arr);
返回arr;
}
数组=递增1(数组);
console.log(数组);
//[未定义,未定义,未定义,未定义,未定义,未定义]
//[2,3,4,5,6,8]
这里发生了几件事:
var数组=[1,2,3,4,5,7];
函数递增1(arr){
arr=arr.map(v=>v+1);
控制台日志(arr);
}
递增1(数组);
console.log(数组);
//[未定义,未定义,未定义,未定义,未定义,未定义]
//[2,3,4,5,6,8]
以上所有答案都是正确的,但它们忽略了这里最重要的一点。JavaScript中有一个称为“通过共享调用”的概念
考虑以下代码:
var num=3;
var json={myValue:'10'};
var json2={myValue:'100'};
函数调用共享(a、b、c){
a=a+37;
b={myValue:'新值'};
c、 myValue='新值';
}
callBySharing(num、json、json2);
console.log(num)//3*不变*
log(json.myValue)//10*不变*
console.log(json2.myValue);/'新值“*已更改*
是的,但这并不能回答有关范围的问题。。。您不希望输出在应用映射的函数范围内外保持一致吗?好的,实际上现在第二个console.log没有转换的值,我所做的工作是:返回arr[index]=arr[index]+1;因为incrementByOne(arr)需要返回(arr)
,当您调用它时,您需要将结果分配给数组,数组=incrementByOne(数组)
返回arr[index]+1
-真正的程序员将返回值+1
:p