js代码的执行顺序问题

一只傻皮皮 2018-04-26 10:02:11

初学js,对于以下这个代码的运行结果不是很理解,看了其他的博客还是不能理解,求大佬解释orz。

var a = [1,2,3];
console.log(a);//[[3,2,1],2,3]
a=f(a);
console.log(a);//[3,2,1]
function f(a){
a[0]=[3,2,1];
return a[0];
}
...全文
567 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一只傻皮皮 2018-04-27
  • 打赏
  • 举报
回复
引用 4 楼 zhangjiahuashibaichi 的回复:
我也遇到类似问题,期待中。
就是3楼和1楼说的,没有展开的时候是执行console.log()的时候变量的值,展开后里面的内容是在所有代码完全执行后的那个变量的值。这其实是console.log()的问题不是代码执行的问题了。
一只傻皮皮 2018-04-27
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
在用console.log(a);输出对象(数组)时,它的属性一开始是折叠不显示对吧。 当你点击左边三角展开对象(数组)的属性时。显示的是你点击展开时候对象(数组)当前的属性,不是执行console.log()时候的属性。 要显示执行console.log()时候的属性应该用 console.log(JSON.stringify(a));
引用 3 楼 dulongfie 的回复:
其实程序执行跟你预想的一样的,但为什么最后输出是[[3,2,1],2,3]呢? 因为你在输出a对象之后,又把a传递到函数去执行,请注意你传递的是一个引用,当你在函数中修改它之后,之前的a对象也会跟着变化,所以你的第一个输出也就变化了, 要达到你想要的效果,可以打断点一步步跟踪,可以看到在没有执行函数之前a对象还是[1,2,3],执行了之后就变成[[3,2,1],2,3]了。 不知道给你说清楚没。
清楚清楚。多谢多谢。
roffer 2018-04-27
  • 打赏
  • 举报
回复
其实程序执行跟你预想的一样的,但为什么最后输出是[[3,2,1],2,3]呢? 因为你在输出a对象之后,又把a传递到函数去执行,请注意你传递的是一个引用,当你在函数中修改它之后,之前的a对象也会跟着变化,所以你的第一个输出也就变化了, 要达到你想要的效果,可以打断点一步步跟踪,可以看到在没有执行函数之前a对象还是[1,2,3],执行了之后就变成[[3,2,1],2,3]了。 不知道给你说清楚没。
yjsl__ 2018-04-27
  • 打赏
  • 举报
回复
[ 1, 2, 3 ] [ 3, 2, 1 ]
天际的海浪 2018-04-26
  • 打赏
  • 举报
回复
在用console.log(a);输出对象(数组)时,它的属性一开始是折叠不显示对吧。 当你点击左边三角展开对象(数组)的属性时。显示的是你点击展开时候对象(数组)当前的属性,不是执行console.log()时候的属性。 要显示执行console.log()时候的属性应该用 console.log(JSON.stringify(a));

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧