新足迹

 找回密码
 注册

精华好帖回顾

· 陕西油泼手工面 (2008-7-13) bluesummer · 2013年,6-7月,33天欧洲游家庭随记(法国,奥地利,匈牙利,瑞士,意大利,梵蒂冈, 感谢斑竹加精) (2013-7-30) jinluo
· 车拿到了,ford XR6 BA,初步油耗统计! (2006-2-25) ufo · 部分狗粮的总结----电梯放在第一楼 (2010-5-24) Sparky
Advertisement
Advertisement
查看: 1876|回复: 11

Java Script基本概念问题 - 和return有关? [复制链接]

发表于 2022-6-18 10:32 |显示全部楼层
此文章由 jackdi 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jackdi 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 jackdi 于 2022-6-18 10:38 编辑

运行如下Java Script
const numbers = [1, 2];
numbers.forEach( item => {console.log (item*10)} );

返回的结果是[10, 20]

但是
const numbers = [1, 2];
result = numbers.forEach( item => {console.log (item*10)} );
console.log(result)

得到的结果是undefined
Google了一下,forEach 的Return Value是undefined。

问题来了,
按我的理解,运行这个
numbers.forEach( item => {console.log (item*10)} );
将会得到一个结果,然后你可以把这个结果赋予给一个参数。以后可以去调用这个参数。
很明显这个理解是错误的。
所以,我这么理解错在哪里了呢?


也就是说,如下两行代码有什么区别呢?
numbers.forEach( item => {console.log (item*10)} );

result = numbers.forEach( item => {console.log (item*10)} );
Advertisement
Advertisement

发表于 2022-6-18 17:59 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lunatic_C_G 于 2022-6-18 18:44 编辑

Array.forEach方法本来用于遍历,是无返回值(void),内部实现没有return;想改变就用map:

  1. numbers = [1, 2];
  2. result = numbers.forEach(item => {
  3.     item * 10;
  4. });
  5. console.log(result)
  6. console.log(numbers)
  7. result = numbers.map(item => { return item * 10;});
  8. //or
  9. //result = numbers.map(item => item * 10);
  10. console.log(result)
  11. console.log(numbers)
复制代码

评分

参与人数 1积分 +1 收起 理由
tenglongroy + 1 我很赞同

查看全部评分

笑看垄断资本党国的虚拟散户自嗨

发表于 2022-6-18 18:05 来自手机 |显示全部楼层
此文章由 DataRecovery 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DataRecovery 所有!转贴必须注明作者、出处和本声明,并保持内容完整
建议发在stack overflow

发表于 2022-6-18 18:13 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
同意3#

发表于 2022-6-18 20:55 |显示全部楼层
此文章由 jackdi 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jackdi 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lunatic_C_G 发表于 2022-6-18 17:59
Array.forEach方法本来用于遍历,是无返回值(void),内部实现没有return;想改变就用map: ...

谢谢回复。

你说“forEach是无返回值”,这句话是什么意思?
  1. numbers.forEach(item => {item * 10;});
复制代码

这个是可以返回一个array的啊。
只是我们不能把这个结果赋予一个“参数” (参数这个词用在这里似乎不太正确)。

为什么Java Script有这样的规定?
是我想多了吗?



发表于 2022-6-18 20:58 |显示全部楼层
此文章由 jackdi 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jackdi 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DataRecovery 发表于 2022-6-18 18:05
建议发在stack overflow

谢谢你的建议
我的中文和英文水平不是1:1

另外,我们这里讨论的很多话题,在洗衣机网站也都有,但是来这里的人也很多啊
Advertisement
Advertisement

发表于 2022-6-18 21:13 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lunatic_C_G 于 2022-6-20 15:19 编辑
jackdi 发表于 2022-6-18 20:55
谢谢回复。

你说“forEach是无返回值”,这句话是什么意思?


forEach方法只有输入没有输出,在内部可以随便处理,但是处理的结果传不出来的,你要将改变的数据传出来,用map方法.
你的这句代码
  1. numbers.forEach( item => {console.log (item*10)} );
复制代码
和这句
  1. numbers.forEach( item => {item*10;} );
复制代码
都是在内部做的处理,唯一不同的是,你的那句代码把,结果输出到了console中,并不是它的接口返回的数据.如果是返回的数据,是可以变量去接收到的

在上面纠结没有意义,js除了基础还有一大堆库/框架要等着你去熟悉,可能会占你后面学习时间的2/3以上.
另外不是为什么js要这样规定,而是很多语言都是这样规范的,c/cpp、cs、java、python、ts.....
原因如果说到了汇编层次,void类型的方法就是会编译(js中的解析)成不将处理后的数据传给寄存器(r0,r1,r2...)直接ret(记得没错的话,是这个汇编指令);需要return数据的方法就是将处理后的数据传给寄存器(r0,r1,r2...)然后ret.
笑看垄断资本党国的虚拟散户自嗨

发表于 2022-6-18 22:20 来自手机 |显示全部楼层
此文章由 javafun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 javafun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
MDN上不是写的很清楚了, Return value - undefined

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

发表于 2022-6-18 22:23 来自手机 |显示全部楼层
此文章由 javafun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 javafun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
另外你的第一个和第二个完全不是一样的的输出啊,

一个是foreach 通过console输出,另外一个是把foreach复制给一个变量,然后输出这个结果值。完全两个东西

发表于 2022-6-18 23:03 |显示全部楼层
此文章由 juury 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 juury 所有!转贴必须注明作者、出处和本声明,并保持内容完整
楼主可能是想用result保存结果以供调用,可以这样
  1. const numbers = [1,2];
  2. const result = [];
  3. numbers.forEach((number) => {
  4.   result.push(number *10 );
  5. });
复制代码

发表于 2022-6-18 23:32 |显示全部楼层
此文章由 pengruijun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pengruijun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
foreach is acting something on each item
Advertisement
Advertisement

发表于 2022-6-20 22:36 来自手机 |显示全部楼层
此文章由 angest 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 angest 所有!转贴必须注明作者、出处和本声明,并保持内容完整
差了3个return了
首先console.log不return
其次你的lambda不return
最后foreach不return

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部