function output() {
var name = 'xiaoming';
setTimeout(function () {
console.log(name);
}, 1000);
}
output();
能解释一下为啥setTimeout中的回调函数为啥能访问output的变量name吗?
setTimeout的第一个匿名函数的作用域能访问setTimeout执行时的上下作用域,这也就是为啥匿名函数内部可以访问变量name的原因。
拓展:如果能理解以下两个片段代码的运行机制,就彻底算是理解闭包了。
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()());
网友评论