1-什么是闭包:
闭包是指有权访问另一个函数作用域中变量的函数。通俗来说就是 ,一个作用域可以访问另外一个函数内部的局部变量。
// An highlighted block
function fn(){
var num=10;
function fn1(){
console.log(num);//10
}
fn1();
}
fn();
//fn就是一个闭包函数
21闭包的作用:
延伸变量的作用范围
function fn() {
var num = 10;
function fun() {
console.log(num);
}
return fun;
}
var f = fn();
f();
闭包练习案列
<ul class="nav">
<li>我好帅</li>
<li>我真帅</li>
<li>我超帅</li>
<li>我特别帅</li>
</ul>
// 利用闭包函数打印当前li的索引号
for (var i = 0; i < lis.length; i++) {
// 利用for循环创建了4个立即执行函数
// 立即执行函数也成为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
(function(i) {
lis[i].onclick = function() {
console.log(i);
}
})(i);
}
<ul class="nav">
<li>我好帅</li>
<li>我真帅</li>
<li>我超帅</li>
<li>我特别帅</li>
</ul>
// 五秒后打印出li的所有内容
for (var i = 0; i < lis.length; i++) {
(function(i) {
setTimeout(function() {
console.log(lis[i].innerHTML);
}, 5000)
})(i);
}
闭包函数思考题:
// An highlighted block
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
return function() {
return this.name;
};
}
};
console.log(object.getNameFunc()())
-----------------------------------------------------------------------------------
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
var that = this;
return function() {
return that.name;
};
}
};
console.log(object.getNameFunc()())