中国工厂网站官方网站,常州如何进行网站推广,佛山网站制作专家,网页升级紧急通知区域今天在调试代码时遇到一个问题#xff0c;刚开始想不明白#xff0c;然后分析了一下后#xff0c;才知道其中的问题#xff0c;这也是一个基础的问题#xff0c;#xff08;所以基础是很重要的#xff09; 代码如下#xff1a; var a 3;
a a * 2;
console.log(a); //… 今天在调试代码时遇到一个问题刚开始想不明白然后分析了一下后才知道其中的问题这也是一个基础的问题所以基础是很重要的 代码如下 var a 3;
a a * 2;
console.log(a); // a 6var 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}] 如果你能不假思索的得出上面的答案我相信你对这方面的知识已经很了解了所以可以不用继续往下看了如果你像我今天该开始一样觉得有点疑惑的话那么这篇文文章就很适合你。 首先我们应该知道的是在 javascript 中基本数据类型是通过值传递的。比如: var a1,b;b a;// 这时 a 和 b 的值都为 1a 2;//这时 a 的值 为 2b 的值还是为 1 所以当 b a a 2a直接赋给b的值 是1所以 b 就等于 1而 a 的变化改变不了 b 的值 在 js 中复杂数据类型是通过 引用传递的比如 var v1 { a:1 };
var v2 v1; //v2 { a:1 }
v1.a 2;
console.log(v2.a); // v2.a 2; 了解了以上的一些基础知识后就不难理解最开始的代码输出结果了。 1.var a 3;a a * 2;console.log(a); // a 62. 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 citem d所以后面对item 的改变就与 bvd 没有关系了。 所以那么 第三段也就很好理解了他也与第二段代码一样每次回存在一个赋值但是注意的是 arr2 中存储的是对象就是 item { a:1 } ...,这样 item 仍然指向 arr2 中对象所以这时对 item 的修改就可以通过 arr2 来反应出来。 虽然这只是自己的粗心造成的但仍然是自己的基础不扎实而导致的所以想要成为好的程序员基础是非常重要的。希望大家都能注重基础的知识为自己学习高级东西而打下坚实的基础。