参数
JS中的参数传值都是按值来传递,无论是基本类型还是引用类型的变量。
如果是基本类型的参数,则值会复制一份给命名参数/arguments对象。
如果是引用类型的值则会把该值在内存中的地址复制一份给参数/arguments对象,此时该局部变量(函数的参数实际上是一个局部变量)的变化会反应在函数外部,因为操作的是同一个对象。
变量类型检测
使用typeof
操作符可以检测出基本类型,除了null
会返回object
。
此外,检测方法会返回function
,除此以外的引用类型都是返回object
。
基本类型的数据其大小是固定的,保存在粘中;引用类型的数据保存在堆中。
作用域
所有的变量都存在于一个执行环境(作用域)中。每当进入一个新的执行环境,都会创建一个作用域链。作用域链保存了变量对象(保存了可访问的属性和方法)的引用,保证了标识符的有序搜索。
全局变量在使用完毕后最好进行引用解除,即obj = null
。以便垃圾收集器在下次运行的时候回收内存。
访问一个未声明的变量会报错:ReferenceError: num is not defined。而访问对象不存在的属性返回的是undefined
。
通常对必填参数使用命名参数形式,而对可选参数使用对象字面量来封装。