作用域和闭包:
在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。
局部作用域
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
全局作用域
变量在函数外定义,即为全局变量。
全局变量有 全局作用域: 网页中所有脚本和函数均可使用。
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
JavaScript变量的生命周期:
JavaScript 变量生命周期在它声明时初始化。
局部变量在函数执行完毕后销毁。
全局变量在页面关闭后销毁。
注:全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
闭包:
1.要了解闭包,首先应该了解js的垃圾回收机制
垃圾回收机制:
当所有的环境里都不在有某个对象/数据的引用时,这个数据会自动被回收 ( 全局变量除外,不管有没被引用 )
何为闭包?形成闭包的条件?闭包的作用是什么?
1.函数嵌套函数( 有作用域的嵌套 );
2.内部函数使用了外部函数的变量/参数;
作用:内部函数使用了外部函数的变量或参数会被永久的保存下来。
function fn(){
var a = 0;
a++;
alert( a );
}
fn() 当这个函数执行完了之后,后面没有再调用了,那么函数里面就会被删除。
闭包的优缺点:
优点:使用的变量会被永久存储(在关闭程序释放),我可以对同一个变量连续性进行多次操作。
缺点:使用的变量会被永久保存的,当大量使用闭包时,会对内存的消耗有点点高