js函数(4)闭包
8.6闭包 背景:3.10 变量作用域 在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明一个局部变量或者函数参数中带有的变量和全局变量重名,则局部变量会覆盖全局变量; 在全局作用域编写代码时可以不写var 语句,但是声明局部变量时必须使用var语句 3.10.1函数作用域和声明提前 js中没有块级作用域,取而代之是函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。 js的函数作用域值:在函数内声明的所有变量在函数体内是始终可见的。 变量在声明之前就已经可以使用---------声明提前 3.10.2作为属性的变量 使用var声明一个变量,不可以使用delete删除;不用var定义的变量则可以使用delete删除。 js中使用this关键字来引用全局对象,却没有方法引用局部变量中存放的对象。 3.10.3作用域链 类比 局部变量看做是自定义实现的对象的属性。 每一段js都有一个与之关联的作用域链:该作用域链是一个对象列表或者链表,该组对象定义了这段代码”作用域中“的变量。 当js需要查找变量x时(过程称作变量解析) 1 、它会从链中的第一个对象进行查找,如果这个对象有一个名为x的变量,则会直接使用这个属性的值 2 、如果第一个对象中不存在名为x的属性,则会继续查找链上的下一个对象。 3如果第二个对象依旧没有名为x的属性