webveuje/js/demo/bibao.html

113 lines
2.7 KiB
HTML
Raw Normal View History

2021-03-23 10:58:10 +08:00
<!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>