首页 > 技术文章 > JavaScript笔记—变量、作用域

fehammer 2016-07-14 19:53 原文

变量

基本类型和引用类型

  • 不能给基本类型添加属性,只在赋值时有效,下一行访问时立刻消失。

  • 基本类型复制是先创建一个变量存值,然后把这个变量赋值给对应的变量,独立的内存空间。引用类型是引用同一对象,修改属性会有影响。

  • 传递参数时都是按值传递,传递参数就像是复制。基本类型传递参数后函数内的变量与函数外的变量相互独立。引用类型则因为是引用的同一内存地址的对象,函数内修改会体现在函数外,如果在函数内重写obj时,因为变量引用变成局部对象,局部对象在函数执行完毕后就销毁了,所以不会影响到外部函数,如

      function setName(obj){
          obj.name = "nihao";
          obj = new Object;
          obj.name = "gry";
      }
      var person = new Object();
      setName(person);
      alert(person.name);//"nihao"
    
  • 检测基本类型用typeof,检测引用类型用instanceof

作用域

  • 执行环境和变量对象是相互关联的,执行环境是栈操作。
  • 作用域链。作用域链的前端都是当前执行代码所在的环境的变量对象,如果环境是函数的话,活动对象时argument对象,下一个变量就是外部的环境,以此类推。
  • 由于没有块级作用域,所以查询标识符都是惰性查询

推荐阅读