函数的闭包和变量的作用域
变量作用域:
根据变量的作用范围不同:
全局变量:在全局有效
1)在函数外定义的变量都是全局变量
2)若定义变量未使用var
3)window对象的属性也是全局变量
局部变量:
在函数内声明的变量(包括参数位置)
变量作用域:
推荐多适用局部变量(使用完可以快速被回收)
全局变量:生命周期较长,占用内存更久
- 函数的闭包:有权在函数内访问另一个函数作用域内的变量
有权在一个函数范围内访问另一个函数作用域内的变量,并且将该函数返回
例子:
<script>
/*
有权在一个函数内范文另一个函数作用域中的变量,并且将该函数返回
*/
function fn1() {
var a = 20;
console.log(a);
// function fn2() {
// // var b = 50;
// // console.log(b);
// console.log(a);
// }
// fn2();
return function () {
console.log(a);
};
}
// fn1();
// var fn=fn1();
// fn();
fn1()();
</script>
```javascript
<script>
var arr = []; //保存数据
//数组中追加内容
for (var i = 0; i < 3; i++) {
arr.push((function (i) {
// console.log(i);
return function () {
console.log(i);
};
})(i));
}
console.log(arr); //数组内包含三个函数
//执行数组中的函数
for (var j in arr) {
// console.log(arr[j]);
arr[j]();//3 执行函数时,第一个for早就执行完了,i=3
}
</script>