什么是闭包? 有什么作用?
-
闭包是指有权限访问另一个函数作用域的变量的函数(就是能够读取其他函数内部变量的函数)。创建闭包的常见方式就是在一个函数内部创建另一个函数即内部函数。
当内部函数“在定义它的作用域”的外部被引用时,就创建了该内部函数的闭包,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被释放,因为闭包需要它们。
function f1(){
n=999;
function f2(){ // f2函数,就是闭包。
alert(n); // 在Javascript语言中,只有函数内部的子函数才能读取局部变量。
} // 可以把闭包简单理解成“定义在一个函数内部的函数”。
return f2;
}
var result=f1();
result(); // 999
// 闭包可以简单理解成“定义在一个函数内部的函数”。
本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
-
闭包的作用
1.可以读取函数内部的变量;
2.让这些变量的值始终保持在内存中(在函数a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量)。
setTimeout 0 有什么作用?
setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。即延时指定的毫秒数再执行指定代码。
setTimeout(function(){ //延时1000毫秒后执行的代码
console.log('延时1s执行');}, 1000);
var clock;clock = setTimeout(function(){
console.log('延时3s开始执行')
}, 3000);
clearTimeout(clock);
// 如果要取消timeout,需要保存setTimeout的返回值,用clearTimeout取消掉这个返还值。
//clearTimeout()方法用于停止执行setTimeout()。
代码
下面的代码输出多少?修改代码让 fnArr[i]()
输出 i。使用 两种以上 的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){ return i;
};
}
console.log( fnArr[3]() ); // 10
方法一
方法二
网友评论