JS:变量、作用域和内存问题

在这里插入图片描述

标注:

在这里插入图片描述
向参数传递基本类型时:把值从一个变量赋值到另一个变量
传递引用类型时:把这个值在内存中的地址赋值给局部变量

  • 函数中基本类型的参数传递
 function addTen(num) {
          num += 10;
          return num;
        }
        var count = 20;
        var result = addTen(count);
        console.log(count); //20,没有变化
        console.log(result);//30

将count的值传给局部变量num,对num进行加10后返回;count值没有变换

  • 函数中的引用类型的参数传递
        function setName(obj) {
          obj.name = "Nicholas";
        }
        var person = new Object();
        setName(person);
        console.log(person.name); //“Nicholas”

将person对象存放的内存地址赋值给obj,所以person和obj指向的是相同的对象。

  function setName(obj) {
    //将对象1存放的地址赋值给obj,即obj指向对象1
    obj.name = "Nicholas"; //将对象1的name属性设置为"Nicholas"
    obj = new Object(); //此时obj改变指向,指向新创建的对象2
    obj.name = "Greg";//将对象2的name设置为"Greg",不影响对象1的属性值
  }
  var person = new Object(); //将person指向该对对象1
  setName(person);
  console.log(person.name); //"Nicholas"

其中这个在函数内部创建的局部变量,在函数执行完毕之后会立即被销毁。

在这里插入图片描述

        var s = "Nicholas";
        var b = true;
        var i = 22;
        var obj = new Object();
        var n = null;
        var u;
        console.log(typeof s); // string
        console.log(typeof n); // object
        console.log(typeof i); // number
        console.log(typeof obj); // object
        console.log(typeof u); // undefined
        console.log(typeof b); // boolean
        //typeof检测函数时,会返回function,正则表达式值根据浏览器不同结果为object或者function

在这里插入图片描述
with语句接收的是location对象,因此变量对象中就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域链的前端

        function buildUrl() {
          var qs = "?debug=true";
          with(location) {
            var url = href + qs;
          }
          return url;
        }

在这里插入图片描述

        function add(num1, num2) {
          var sum = num1 + num2;
          return sum;
        }
        var result = add(10,20);
        alert(sum);//由于sum在函数执行之后被销毁,因此会导致错误

补充:

所有变量(包括基本类型和引用类型)都存在于一个执行环境(作用域)当中,这个执行环境决定了变量的生命周期:

  1. 每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链。
  2. 变量的执行环境有助于确定应该在何时释放内存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值