基本类型和引用类型
基本类型(string 、num、boolean、Null、undefined),这种数据类型是按照值访问的,可以直接操作保存在变量中的值
引用类型:引用类型是保存在内存的对象,javascript不允许直接访问内存中的位置,也即是说不能直接操作对象的内存空间,在操作对象的时候,实际上是操作对象的引用而不是实际的对象
执行环境和作用域
口令:
AO
- 创建AO对象 Activation Object(执行期上下文)
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一
- 在函数体里面找函数声明,值赋予函数体
对于暗变量(未声明变量直接赋值)属于全局变量
执行环境定义了变量或者函数有权访问其他数据
作用域:保证对执行环境有权访问的所有变量和函数的有序访问
注意:内部环境通过作用域链访问所有的外部环境,外部环境不能访问内部环境的任何变量和函数。这些环境之间的联系是线性的有次序的。每个环境可以向上搜索作用域链,以查询变量和函数名
if语句的变量声明会将变量添加到当前的执行环境中,如果是小环境就在小环境,如果是window,那么执行环境就是window
对于for语句:由for语句创建的变量i即使在for循环执行结束后也会依旧存在for循环外部的环境中
可参考实例:https://juejin.im/post/6844903855554035725
声明变量
使用var创建的变量自动添加到最接近的环境中。
在函数内部,最接近的环境即使函数的局部环境;如果初始化函数没有使用var声明,该变量会自动被添加到全局环境,注意对于不声明的变量在严格模式下回到孩子错误