美文网首页
一次基础掌握不牢的教训...

一次基础掌握不牢的教训...

作者: 喜欢薄荷绿 | 来源:发表于2017-03-06 19:35 被阅读0次

今天在调试代码时遇到一个问题,刚开始想不明白,然后分析了一下后,才知道其中的问题,这也是一个基础的问题,(所以基础是很重要的)

代码如下:

var a = 3;
a = a * 2;
console.log(a); // a = 6

var b = 1, c =2, d = 3;
var arr1 = [b,c,d];
arr1.forEach((item)=>{
    item = item * 2;
});
console.log(arr1); //arr1 = [1,2,3];

var arr2 = [{a:1},{a:2},{a:3}];
arr2.forEach((item)=>{
    item.a = item.a*2;
});
console.log(arr2); //arr2 = [{a:2},{a:4},{a:6}]

如果你能不假思索的得出上面的答案,我相信你对这方面的知识已经很了解了,所以可以不用继续往下看了,如果你像我今天该开始一样,觉得有点疑惑的话,那么这篇文文章就很适合你。

  1. 首先我们应该知道的是,在 javascript 中,基本数据类型是通过值传递的。

比如:

var a=1,b;
    b = a;// 这时 a 和 b 的值都为 1
    a = 2;//这时 a 的值 为 2,b 的值还是为 1 ,

01.jpg

所以当 b = a, a = 2;a直接赋给b的值 是1,所以 b 就等于 1,而 a 的变化改变不了 b 的值

  1. 在 js 中复杂数据类型是通过 引用传递的

比如:

var v1 = { a:1 };
var v2 = v1; //v2 = { a:1 }
v1.a = 2;
console.log(v2.a); // v2.a = 2;
02.jpg

了解了以上的一些基础知识后,就不难理解最开始的代码输出结果了。

1.
    var a = 3;
    a = a * 2;
    console.log(a); // a = 6
    
2. 
    var b = 1, c =2, d = 3;
    var arr1 = [b,c,d];
    arr1.forEach((item)=>{
    item = item * 2;
    });
    console.log(arr1); //arr1 = [1,2,3];
    
3. 
    var arr2 = [{a:1},{a:2},{a:3}];
    arr2.forEach((item)=>{
    item.a = item.a*2;
    });
    console.log(arr2); //arr2 = [{a:2},{a:4},{a:6}]
    

第一段代码当然好理解,就是简单的值传递而已,然而第二段代码呢?我刚开始有点困惑的是,既然也是值传递,那为什么它的值没有变化还是原先的值,注意:这里我忽略了重要的一点,所以导致我不明白,那就是在这个 forEach 的遍历中,还存在一个赋值的过程,就是这个过程导致 arr1 的值没有改变,在每次循环中 arr1中的值都会赋给 item, 就是 item = b, item = c,item = d,所以后面对item 的改变就与 b,v,d 没有关系了。
所以那么 第三段也就很好理解了,他也与第二段代码一样,每次回存在一个赋值,但是注意的是 arr2 中存储的是对象,就是 item = { a:1 } ...,这样 item 仍然指向 arr2 中对象,所以这时对 item 的修改就可以通过 arr2 来反应出来。

虽然这只是自己的粗心造成的,但仍然是自己的基础不扎实而导致的,所以想要成为好的程序员,基础是非常重要的。希望大家都能注重基础的知识,为自己学习高级东西而打下坚实的基础。

相关文章

  • 一次基础掌握不牢的教训...

    今天在调试代码时遇到一个问题,刚开始想不明白,然后分析了一下后,才知道其中的问题,这也是一个基础的问题,(所以基础...

  • 基础不牢

    一个公众号要刊发我的《村里的女人们之:五妮》这篇文章,让我修改,我又请一位老兄帮忙,加上编辑看出来的一处错误,总共...

  • 如何巩固孩子的语文基础知识

    老师常会跟学生家长说,打牢基础是关键,那什么是基础知识呢,应该如何打牢基础知识呢? 语文学科的基础知识就是掌握好生...

  • 5月25日 教育问题

    他简单粗暴的问责方式我承认激怒我了。 孩子入学第一次摸底考试没有考好。基础知识掌握不牢。 我觉得我和孩子都要改进。...

  • 高效有趣地背法语单词(原创,坚持每周更新)

    bienvenu ! 大家好! 学习一门语言,掌握一定量的单词是其基础,基础不牢,地动山摇。然而当谈起记单词时,我...

  • 基础不牢,地动山摇

    基础不牢,地动山摇

  • 2022-12-28

    基础打不牢, 学问攀不高。

  • 小学语文别留遗憾

    俗话说的好:基础不牢,地动山摇。小学语文学习是环环相扣的,从会写字到写得快——掌握基础字词——阅读理解。 小学语文...

  • 继承,重写

    最近学习javaweb突然发现很多java的知识掌握的不牢,所以又回去复习了一下java的基础知识,感觉收获颇深,...

  • 每日一句

    基础不牢,地动山摇,物质是最重要的基础

网友评论

      本文标题:一次基础掌握不牢的教训...

      本文链接:https://www.haomeiwen.com/subject/hmbugttx.html