变量、作用域和内存问题

这篇文章简单的总结javascirpt 高级程序设计的第四章。

变量的复制

  • 基本数据类型变量的复制,会创造一个副本

num2 是num1 的一个副本,以后这两个变量可以参与任何操作而不会互相影响。

  • 引用类型变量的复制,复制的是指针,因此两个变量指向同一个变量


首先,变量obj1保存了一个对象的实例。然后,这个值(指针)被复制到了obj2. 所以,obj1和obj2指向同一个对象。

传递参数

ECMAScript中所有函数都是按值传递。也就是说,把函数外面的值复制给函数内部的参数。

  • 基本数据类型

  • 引用数据类型

为了证明对象是按值传递的,请看以下代码

如何person 是按引用传递的,那么person 就会自动被修改为指向其name属性值为'Greg' 的新对象。

检测类型

  • 基本数据类型(typeof)

注意typeof 不是函数,是操作符(operator)

  • 引用数据类型(instanceof)

执行环境和作用域

没有块级作用域

在C的语言中,由花括号封闭的代码块有自己的作用域,但在javascript中没有

对于javascript来说, 由for语句创建的变量i即使在for循环执行结束后,也依然会存在循环外部的执行环境中

声明变量

  • 使用var 声明的变量会自动被添加最接近的环境中
    • 在函数内部,最接近的环境就是函数的局部环境
  • 如果没有使用var声明,该变量会自动被添加到全局环境

查询标识符

  • 搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符。

在这个过程中,如果存在一个局部变量的定义,则搜过会自动停止。

Leave a Reply

Your email address will not be published. Required fields are marked *