2021-11-03 10:05:10 +08:00

81 lines
1.8 KiB
JavaScript

// 外部函数
// function eat(){
// var food = "鸡翅";
// return function(){
// console.log(food);
// }
// }
// // 执行到第 8 行代码时,形成了一个闭包(封闭的空间)
// // 在该闭包中,引用了 food 这个变量
// // 所以 food 是没有被销毁的
// var i = eat();
// i();
// 作用域是在函数创建的时候就确定下来了
// var food = "rice";
// // function eat(){
// // console.log(food);
// // }
// (function(){
// var food = "noodle";
// function eat(){
// console.log(food);
// }
// eat();
// })()
// 这里就是一个普通的计数器
// var count = 0; // 全局变量
// function counter() {
// count++;
// console.log(count);
// }
// for (var i = 0; i < 10; i++) {
// counter();
// }
// 上面的代码有一个最大的问题,就是全局污染
// ...
// var count = 5;
// console.log(count);
// 接下来我们使用闭包来解决上面的全局污染的问题
// function counter() {
// var count = 0; // 计数器变量
// return function(){
// count++;
// console.log(count);
// }
// }
// var func = counter();
// for (var i = 0; i < 10; i++) {
// func();
// }
// var count = "aaa";
// 下面这段代码也是一个闭包
// 一个函数中要嵌套一个内部函数,并且内部函数要访问外部函数的变量
// 内部函数要被外部引用
// var a = 100;
// setTimeout(function () {
// console.log(++a);
// }, 1000);
// 有些时候因为闭包所存在的问题
for (let i = 1; i <= 3; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
// for (var i = 1; i <= 3; i++) {
// (function (i) {
// setTimeout(function () {
// console.log(i);
// }, 1000);
// })(i);
// }