标签:
首先说一下扩展运算符中的i++和++i
i++和++i在单独使用的时候是一样的。
var i=1;
//i++;
//console.log(i);//2
++i
console.log(i);//2
但是当它参与其他运算是就会发生改变
var i=1;
var b=i++ + i++ + i++;//2+3+4
console.log(i);//4
console.log(b)//9
所以总结一下关于i++和++i,即i++是在加号前面,所以向赋值在加1,而++i是先运算再赋值
下面这个案例会涉及到提前声明hoist和原始类型和引用类型的的原理
在下面的原理中。参数a实际上是在getValue函数中的一个局部变量,所以才会有var a=a之说。根据按值传递的原理,原始变量访问的是一个实际值,即任何方式都没有办法改变一个基本类型的值。所以a并没有改变
var a=5
function getValue(a){
//var a=a;
return a++
}
var x=getValue(a);
console.log(x);//5
console.log(a);//5
在看看引用类型的案例
javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,我们实际操作的就是对象的引用,所以在这个案例中arr是变化了的
var arr=[1,3,4]
function getValue(arr){
//var arr=arr;
for(var i=0;i<arr.length;i++){
++arr[i]
}
console.log(arr);//[2,4,5]
}
getValue(arr);
console.log(arr);//[2,4,5]
本人可能能力有限,若是有什么不对之处,欢迎指正。
关于扩展运算符中i++和++i,以及基本类型和引用类型的综合应用
标签:
原文地址:http://www.cnblogs.com/chen-q/p/5247969.html