基本类型、引用类型
基本类型、引用类型
- 基本类型值(数值、布尔值、null和undefined):指的是保存在栈内存中的简单数据段;
- 引用类型值(对象、数组、函数、正则):指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象
    var a;
    var b;
    var obj;
    var obj2;
    a = 1;
    b = 2;
    var obj = {
        name: 'ruoyu',
        sex: 'male',
        age: 30,
        friend: {
            name: 'hello', 
            age: 100
        }
    }
    var newObj = {};
    b = a;
    console.log(b);
    var obj2 = obj;
    var obj3 = {name: 'hello'};
    var obj4 = {name: 'hello'};
    obj3 === obj4
    function sum(){
        console.log('sum...')
    }
    var sum2 = sum;
    sum2()
函数的参数传递
function inc(n){
    n++;
}
var a = 10;
inc(a);
console.log(a);
function incObj(obj){
    //var obj = o //0x0001
    obj.n++;
}
var o = {n: 10};  //o = 0x0001
incObj(o);
console.log(o);
function squireArr( arr ){
    //var arr = 0x0011
    for(var i = 0; i < arr.length; i++){
        arr[i] = arr[i] * arr[i];
    }
}
function squireArr2( arr ){
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        newArr[i] = arr[i] * arr[i];
    }
    return newArr;
}
var arr = [2,1,3,6]; //arr  0x0011
squireArr(arr);
console.log(arr); // [4,1,9,36]
var arr2 = squireArr2(arr)
console.log(arr2);
对象浅拷贝和深拷贝
//浅拷贝
    function shallowCopy(oldObj) {
        var newObj = {};
        for(var i in oldObj) {
            if(oldObj.hasOwnProperty(i)) {
                newObj[i] = oldObj[i];
            }
        }
        return newObj;
    }
//深拷贝
    function deepCopy(oldObj) {
        var newObj = {};
        for(var key in oldObj) {
            if(typeof oldObj[key] === 'object') {
                newObj[key] = deepCopy(oldObj[key]);
            }else{
                newObj[key] = oldObj[key];
            }
        }
        return newObj;
    }