Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数调用的结果是未定义的?_Javascript_Function_Undefined_Call_Console.log - Fatal编程技术网

Javascript 为什么函数调用的结果是未定义的?

Javascript 为什么函数调用的结果是未定义的?,javascript,function,undefined,call,console.log,Javascript,Function,Undefined,Call,Console.log,为什么在JS中交换函数调用后不能立即显示数组?为什么函数调用的结果是未定义的 const swap=(arr)=>{ for(设i=0;i(i+1)*3); console.log(r);//-->数组[3,6,9,12,15,18,21,24,27,30] //掉期(r); //为什么数组不能在交换函数调用后立即显示? console.log(swap(r));/>显示未定义但已完成交换功能的内容 console.log(r);//-->数组[6,9,12,15,18,21,24,27,30

为什么在JS中交换函数调用后不能立即显示数组?为什么函数调用的结果是未定义的

const swap=(arr)=>{
for(设i=0;i(i+1)*3);
console.log(r);//-->数组[3,6,9,12,15,18,21,24,27,30]
//掉期(r);
//为什么数组不能在交换函数调用后立即显示?
console.log(swap(r));/>显示未定义但已完成交换功能的内容

console.log(r);//-->数组[6,9,12,15,18,21,24,27,30,3]
是的,您是正确的,这是因为您试图输出
交换
函数调用的结果,但没有返回任何特定的结果。因此,默认结果是未定义的

如果要在交换后输出数组,请在函数中按如下方式返回:

const swap=(arr)=>{
for(设i=0;i(i+1)*3);

控制台日志(交换(r))您不需要返回任何内容,只需将函数
swap
保持原样即可。传递的数组是
r=[…数组(10)]的一个引用。map(((i,i)=>(i+1)*3)
因此,每次修改都会在函数
swap
结束后修改该数组

只需打印数组
console.log(r)

const swap=(arr)=>{
for(设i=0;i(i+1)*3);
console.log(r);//-->数组[3,6,9,12,15,18,21,24,27,30]
掉期(r);
//为什么数组不能在交换函数调用后立即显示?
//console.log(swap(r));/>显示未定义但已完成交换功能的内容
console.log(r);//-->数组[6,9,12,15,18,21,24,27,30,3]

.as控制台包装{最大高度:100%!重要;顶部:0;}
是的,你是对的;您应该使用
返回arr

arr=newarray(10).fill().map((_,i)=>(i+1)*3);
控制台日志(arr);
res=[…arr.slice(1),arr[0]];//更漂亮,但在大型阵列上速度可能会非常慢
//或者对于更快的一个:
旋转=(arr)=>!(arr.push(arr.shift())| | arr;
//或
/*常数旋转=(arr)=>{
var first=arr[0];
对于(变量c=0,l=arr.length-1;c控制台日志(旋转(arr))这就是原因。数组被就地修改,但函数不返回任何内容。添加
返回arr在函数末尾,自己看看。问题不在于函数的逻辑。如果OP没有提到,你不应该对此做出假设it@musefan现在好点了吗?谢谢@nullqube!为什么在函数中更改数组不是一个好的做法?欢迎。你可以搜索“松耦合”和“副作用”,当一个函数改变了它范围之外的东西时;你可以在这里读更多。顺便说一句,如果您想更改数组本身,最好扩展array.prototype,使其变得像arr.rotate()一样更加明显。感谢@nullqube的文章!当我写东西的时候,我尽量少制造垃圾。如果我可以修改目标对象,我将在不创建垃圾的情况下进行修改。这是一篇关于优化的好文章,它是最坏的邪恶、副作用还是垃圾收集器?