113 lines
2.7 KiB
HTML
113 lines
2.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>
|
|||
|
// 目标 :从全局访问函数内部的变量
|
|||
|
// 方法1
|
|||
|
// function f1() {
|
|||
|
// var n = 999;
|
|||
|
// return {
|
|||
|
// n:n
|
|||
|
// }
|
|||
|
// }
|
|||
|
|
|||
|
// alert(f1().n)
|
|||
|
|
|||
|
// 方法2:
|
|||
|
// function f1() {
|
|||
|
// var n = 999;
|
|||
|
// function show(){
|
|||
|
// return n
|
|||
|
// }
|
|||
|
// show()
|
|||
|
// }
|
|||
|
// alert(f1()) //undefined F1函数没有返回值
|
|||
|
// alert(show()) // show is not defined show()在函数f1的作用域中
|
|||
|
// alert(f1()) //undeined F1函数没有返回值
|
|||
|
|
|||
|
// 作用域:
|
|||
|
//
|
|||
|
// window
|
|||
|
// f1
|
|||
|
// n
|
|||
|
// show
|
|||
|
|
|||
|
// function f1() {
|
|||
|
// var n = 999;
|
|||
|
// function show(){
|
|||
|
// return n
|
|||
|
// }
|
|||
|
// return show()
|
|||
|
// }
|
|||
|
// alert(f1())
|
|||
|
|
|||
|
// 方法三
|
|||
|
// function f1(){
|
|||
|
// var n=999;
|
|||
|
// function show(){
|
|||
|
// alert(n)
|
|||
|
// }
|
|||
|
// show()
|
|||
|
// }
|
|||
|
|
|||
|
// f1()
|
|||
|
|
|||
|
function f1(){
|
|||
|
var n=999;
|
|||
|
function add(){
|
|||
|
return n++
|
|||
|
}
|
|||
|
return add() //函数返回值
|
|||
|
}
|
|||
|
console.log(f1()) //999
|
|||
|
var res=f1() //999
|
|||
|
console.log(f1()) //999
|
|||
|
|
|||
|
// GO: f1
|
|||
|
// ao: n, add
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
function f1(){
|
|||
|
var n=999;
|
|||
|
function add(){
|
|||
|
return n++
|
|||
|
}
|
|||
|
return add //函数体
|
|||
|
}
|
|||
|
var res=f1() //通过return add 将add赋给res
|
|||
|
// console.log(res)
|
|||
|
// add 其实就是 全局访问f1中变量的一个桥
|
|||
|
console.log(res()) //999
|
|||
|
console.log(res()) //1000
|
|||
|
|
|||
|
|
|||
|
// GO: f1,
|
|||
|
// res:add
|
|||
|
// AO: n
|
|||
|
// add
|
|||
|
|
|||
|
</script>
|
|||
|
</head>
|
|||
|
|
|||
|
<body>
|
|||
|
<h3>作用域</h3>
|
|||
|
<p>
|
|||
|
函数内部的变量叫局部变量 只能再函数体内部访问 外部无法访问。 前提是 声明变量的方式是var
|
|||
|
如果变量前面没有修饰,那么它就是 全局变量
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
闭包的形式上是父级函数返回的是子函数的函数体,从全局变量接收后就相当于把子函数塞给go,执行后不会被销毁
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
闭包的用处:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
|
|||
|
</p>
|
|||
|
</body>
|
|||
|
|
|||
|
</html>
|