解释setTimeout的回调执行的原理

2018-01-05  本文已影响0人  默成S
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()());
上一篇 下一篇

猜你喜欢

热点阅读