JS高级程序设计4-变量、作用域、和内存的问题

  • 基本类型和引用类型(P68)

    基本类型指的是简单的数据段,而引用类型指那些可能有多个值构成的对象(P68);
    不能给基本类型的值添加属性,虽然这样做不会导致任何错误(P69);
    从一个变量向另一个变量复制基本类型值和引用类型值时,基本类型的两个变量是相互独立的,而引用类型的两个变量则将引用同一个对象(P70);

  • 传递参数(P70)

    JS中所有函数的参数都是按值传递的;
    传递基本类型值的例子:

    function addTen(num){
              num+=10;
              return num;
          }
    var count=20;
    var result=addTen(count);
    alert(count);//20、没有变化
    alert(result);//30

    使用对象传递参数,仅仅是复制了一个对象给参数,但参数和被传递的对象变量引用的是同一个变量(也就是说,即使对象是按值传递,被传递的参数也与对象变量共同引用一个对象,例子:

    function setName(obj){
        obj.name="Nicholas";
    }
    var person =new Object();
    setName(person);
    alert(person.name);//"Nicholas"

    对象是按值传递的,在函数内重新声明obj对象时,这个变脸引用的就是一个局部对象了:

    function setName(obj){
        obj.name="Nicholas";
        obj=new Object();
        obj.name="Greg";
    }
    var person=new Object();
    setName(person);
    alert(person.name);//"Nicholas"
  • 检测类型(P72)

    typeof操作符适合检测基本数据类型,而instanceof操作符适合检测引用类型(对象)的值(类型);

  • 没有块级作用域(P76)

    作用域不会被花括号强制的限制住

    age1:
    if(true){
        var color="blue";
    }
    alert(color);//"blue"
    
    age2:
    for(var i=0;i<10;i++){
        doSomething(i);
    }
    alert(i);//10
  • 解除引用(有助于回收内存,提高性能)(P81)

    局部变量会在它们离开执行环境时自动被解除引用,全局变量则最好通过将其值设置为null来释放其引用

    function createPerson(name){
        var localPerson=new Object();
        localPerson.name=name;
        return localPerson;
    }
    var globalPerson=createPerson("Nicholas");
    alert(globalPerson.name);
    globalPerson=null;//手工解除globalPerson的引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值