4.1 基本类型和引用类型的值

  • 基本数据类型是按值访问,操作保存在变量中的实际的值
  • 引用类型的值是保存在内存中的对象,JS不允许直接访问内存中的位置,不能直接操作对象的内存空间。为此,引用类型的值是按引用访问的

    4.1.3 传递参数

    ECMAScript中的所有函数的参数都是按值传递
    1. function setName(obj){
    2. obj.name = "name";
    3. obj = new Object();
    4. obj.name = "wa";
    5. }
    6. var person = new Object();
    7. setName(person);
    8. console.log(person.name) // name

如果person是按引用传递的,那么person就会自动被修改为其name属性值为”wa”的新对象,但是,最后显示的值仍然是name,这说明即时在函数内部修改了参数的值,但原始的引用仍然保持不变.实际上,当在函数内部重写obj时,这个变量引用是一个局部对象。而局部变量会在函数调用完毕时出栈立即被销毁释放内存.


小结:

  • 基本类型值在内存中存放在栈内存中;
  • 引用类型的值是对象,保存在堆内存中;

第四章 变量、作用域和内存问题 - 图1