前端第二周,Javascript--堆栈存储 +值传递和引用传递

基本数据类型指的是简单的数据段,存储在(stack)中!!!

值传递:基本数据类型俩个变量相互(相等)赋值时进行的值传递

              是将一个变量复制了一份,赋值给另外一个变量

              在内部中俩个变量内存空间是独立的

              所以当改变其中一个变量时,另外一个变量不会发生变化

举个栗子:

 var num1 = 45;

        console.log(num1);//45

        var num2 = num1

        console.log(num2);//45

        num2 = 99;

        console.log(num2);//99

        console.log(num1);//45

        var a = 10;

        console.log(a);//10

        function fn1(b) {

            console.log(b);//10

            b *= 10;

            console.log(b);//100

        }

        fn1(a);

        //基本数据类型在比较时,比较的是  

        var n1 = 100;

        var n2 = 100;

        console.log(n1 == n2);  //100

 

引用数据型指的是有多个值构成的对象,存储在 (heap)中

            引用数据类型是存放在堆内存中的对象

              变量其实就是保存在内存中的一个'指针'

              保存的是堆内存中的引用地址

              这个指针'指向'堆内存中的引用地址  

 

引用传递:引用数据类型俩个变量相互(相等)赋值时进行的时引用传递

                //是将一个变量的指针(存储在堆内存中的引用地址)赋值给了另外一个变量

                //俩个变量都指向内存中的同一个引用地址

                //所以当该变其中一个变量的值时,另外一个变量也会发生该该变

举个栗子:

var arr1 = [1, 2, 3, 4];

        console.log(arr1);//[1, 2, 3, 4];

        var arr2 = arr1;

        console.log(arr2);//[1, 2, 3, 4];

        arr2[1] = true;

        console.log(arr2);//[1, true, 3, 4];

        console.log(arr1);//[1, true, 3, 4];

        var obj1 = { name: '小明', age: 18 };

        console.log(obj1);//{ name: '小明', age: 18 };

        function fn2(obj2) {

            console.log(obj2);//{ name: '小明', age: 18 };

            obj2.age = 19;

            console.log(obj2);//{ name: '小明', age: 19 };

        }

        fn2(obj1);

        console.log(obj1);//{ name: '小明', age: 19 };

        // 引用数据类型在比较时,比较的是 引用地址

        var a1 = [1, 2, 3, 4];

        var a2 = [1, 2, 3, 4];

        console.log(a1 == a2);//false

        console.log(arr1 == arr2);//true

  //练习:

        var num = 10;

        function fn(n) {

            n = 20;

            console.log(n);  //20

        }

        fn(num);

        console.log(num);  //10



 

        var obj = {

            name: '帅哥',

            age: 18

        }

        function fn2(o) {

            o.name = '男神';

            console.log(o.name);  //'男神'

        }

        fn2(obj)

        console.log(obj.name);  //'男神'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值