js 初学闭包的个人粗浅认识
初学js中的闭包,感觉有点类似于C语言中的static局部变量
就试着从这个角度去理解闭包
个人笔记比较杂乱,见谅
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/**
*
*
* 闭包是函数及声明该函数的词法环境的组合
*
* 闭包,指的是函数和创建函数是所需要的词法环境的组合,该环境包含这个闭包创建的时候所能访问的所有局部变量
* 目前接触的有:
* 函数模式的闭包
* 对象模式的闭包
*
*
*
*
*
* 函数中可以形成闭包
*
* 闭包可以缓存数据,这是优点也是缺点
* 优点就是,提升了变量的作用域链
* 本来在函数中定义的变量,是局部变量,在函数执行完毕后就会被自动释放
* 当在函数中形成了闭包,那么这些局部变量的作用域就会被延长,使得外部的函数结束之后,闭包中的函数还是可以使用这些变量
*
* 而这也是缺点,无法及时的释放变量
*
*
* 缓存数据,一般可以放在外部函数和内部函数之间,形成闭包
*
* 其实感觉,闭包有点像C语言里面的static局部变量
* 当我想要在函数中,使用一个变量,而这个变量的值在下一次调用这个函数的时候,能够保存上一次的值
* 那么就用static声明该局部变量,这时,该局部变量就是静态局部变量
* 这个变量外部无法访问,但是其生命周期却和全局一样
*
* 而js中的闭包的作用,也有点这样的感觉
* 我要在函数中使用上次保留下来的值,那么得用全局变量
* 全局变量生存周期应该是伴随整个页面,在页面销毁前
* 全局变量在哪里都可以访问它的值
*
* 但是我又感觉全局变量的范围太广,不够隐秘
* 我想要一个只有我能用的,但是又可以保存上一次的值的变量
*
* 那么,我就把这个变量放在我的函数的外面,这样就可以保存值
* 然后再在这个变量和函数的外面再套一个函数,这样就可以把这个变量局限在外面这个函数内部,实现了隐秘的效果
* 然后我要使用里面的函数,那么就通过外部的函数返回这个函数即可
* 这样,就形成了闭包
*
*
*
*
*/
function ff() {
var num = parseInt(Math.random() * 10 + 1);
return function () {
return num;
}
}
var fn = ff();
console.log(fn());
</script>
</body>
</html>
参考资料
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures