15、函数
创建一个函数,第一次调用时打印1,第二次调用打印2,以此类推
可以利用函数,来隐藏不希望被外部访问到的变量
闭包:
闭包就是能访问到外部函数作用域中变量的函数
什么时候使用:
当我们需要隐藏一些不希望被别人访问的内容时就可以使用闭包
构成闭包的要件:
-
函数的嵌套
-
内部函数要引用外部函数中的变量
-
内部函数要作为返回值返回
<script>
function outer(){
let num &#61; 0
return () &#61;> {
num&#43;&#43;
console.log(num)
}
}
const newFn &#61; outer()
newFn()
newFn()
newFn()
script>
函数在作用域&#xff0c;在函数创建时就已经确定的&#xff08;词法作用域&#xff09;
和调用的位置无关
闭包利用的就是词法作用域
<script>
let a &#61; &#39;全局变量a&#39;
function fn(){
console.log(a)
}
function fn2(){
let a &#61; &#39;fn2中的a&#39;
fn()
}
fn2()
function fn3(){
let a &#61; &#39;fn3中的a&#39;
function fn4(){
console.log(a)
}
return fn4;
}
let fn4 &#61; fn3()
fn4()
script>
16、闭包
闭包的生命周期&#xff1a;
-
闭包在外部函数调用时产生&#xff0c;外部函数每次调用都会产生一个全新的闭包
-
在内部函数丢失时销毁&#xff08;内部函数被垃圾回收了&#xff0c;闭包才会消失&#xff09;
注意事项&#xff1a;
闭包主要用来隐藏一些不希望被外部访问的内容&#xff0c;
这就意味着闭包需要占用一定的内存空间
注意事项&#xff1a;
相较于类来说&#xff0c;闭包比较浪费内存空间&#xff08;类可以使用原型而闭包不能&#xff09;&#xff0c;
需要执行次数较少时&#xff0c;使用闭包
需要大量创建实例时&#xff0c;使用类
<script>
function outer(){
let someVariable &#61; &#39;someValue&#39;
return function(){
console.log(someVariable)
}
}
function outer2(){
let num &#61; 0;
return () &#61;> {
num&#43;&#43;
console.log(num)
}
}
let fn1 &#61; outer2()
let fn2 &#61; outer2()
fn1()
fn2()
fn1 &#61; null
fn2 &#61; null
script>