48 lines
1.7 KiB
HTML
48 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Document</title>
|
||
<script>
|
||
var y=2
|
||
function fn(){
|
||
var x=1
|
||
// console.log(x+y) //3
|
||
function fn1(){
|
||
x=x+32
|
||
console.log(x+y)
|
||
}
|
||
return fn1
|
||
}
|
||
function m(){
|
||
var p=0
|
||
console.log(y)
|
||
return y
|
||
}
|
||
|
||
var z=fn()
|
||
z()
|
||
|
||
var w=m() //w=undefined
|
||
console.log(fn())
|
||
// var z=fn()
|
||
// console.log(z.toString())
|
||
// z() //从全局访问函数fn中的变量 x =====> 闭包
|
||
// 闭包: 有权访问另一个函数作用域中变量的函数
|
||
// 闭包形式:函数嵌套函数 并且返回内层的函数体
|
||
|
||
// 闭包作用:1. 可以读取函数内部的变量
|
||
// 2.让这些变量的值始终保持在内存中
|
||
|
||
|
||
// 造成的问题 1.由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
|
||
// 2. 不要随便改变父函数内部变量的值。(闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value))
|
||
|
||
</script>
|
||
</head>
|
||
<body>
|
||
|
||
</body>
|
||
</html> |