闭包
什么是闭包,函数内返回一个新函数,返回的函数内中有权访问外部函数中局部变量
function fn() {
var a = 1
function fn1() {
console.log("aa");
}
return fn1
}
var f = fn()
f()//aa
// 共有变量 私有变量 受保护变量
// 闭包会造成内存泄漏
// 闭包目的是为了创建私有变量
全局变量 缺点
var a = 1
function fn() {
a++
console.log(a);
}
function fn1() {
a += 10
}
fn() //2
fn1() // 13
fn() // 14
fn() // 14
console.log(a);
全局变量有可能会造成同名的污染
当调用插件时,不清楚插件内的同名全局变量,可能会造成污染
局部变量缺点
局部变量,当函数运行完成后会自动销毁,每次重新执行函数会重新创建定义
局部变量不具备长期存储性,当函数执行完成局部变量就会销毁
局部变量函数外不能调用,具有一定私密性,不会被污染
function fn() {
var a = 1
a++
console.log(a);
}
fn() // 2
fn() //2
fn() // 2
闭包
// 在函数运行完成后,如果这个函数中的局部变量或者参数在其子级作用域有被调用,就
不会销毁
1. function fn() {
var a = 1
var b = 2
return function () {
a++
console.log(a);
}
}
var f = fn() // 返回函数,不会调用
f()//2
f()//3
f()//4
2. var obj = (function () {
var a = 1
return {
paly() {
a++
console.log(a);
}
}
})()
obj.paly() //2
obj.paly() //3
// 闭包,子级作用域有权访问父级作用域中局部变量,用来实现私有变量,执行函数后返
回内部 子级函数,并且子级
// 全局变量可以当最外层的父级
// 函数调用了父级函数中局部变量,该局部变量具备可长期存储,环境外无法访问的特征,减
少了 同 名变量的污染
// 会造成内存泄漏