一、 变量作用域
变量的作用域就是程序源代码中定义这个变量的区域。
全局变量拥有全局作用域。
在函数内声明的变量只在函数体内有定义。函数体内是块级作用域,在声明他们之外的地方是不可见的,只要是在函数体内,不管花括号的位置,都会有意义。
局部变量的优先级高于同名的全局变量。
二、 函数作用域和函数声明提前
类似c语言的书籍中都是花括号的体内时块级作用域,但是JavaScript没有块级作用域都是函数作用域。
函数声明提前:将所有的函数声明都提前到顶部,赋值(初始化)留到原先的位置。
三、作为属性的变量
使用var创建的对象是不可配置,不能使用delete删除。
全局对象可以使用delete删除。
四、 作用域链
每段JavaScript代码都会有与之相关的作用域链,这个作用域链就是一个对象链表或是对象列表。这组对象定义了这段代码(作用域)中的变量。
变量解析:依次从作用域链中查找对象的对象的属性(即变量)的值。
定义函数时就是保存作用域链,当调用函数时就新增一个对象来存储局部变量,并将这个对象添加到作用域链上,使用后删除。