无论函数是在哪里调用,也无论函数是如何调用的,其确定的词法作用域永远都是在函数被声明的时候确定下来的(聊一下JS中的作用域scope和闭包closure
http://www.cnblogs.com/front-Thinking/p/4317020.html)
this的指向:函数在哪里调用才决定了this到底引用的是啥
(JS中的this机制http://www.cnblogs.com/front-Thinking/p/4364337.html)
立即执行函数,调用者为window,所以this指向window
(obj.inner.print=function(){
console.log(this);
})(); //this指向window, 并不指向obj.inner
obj.inner.print(); //this指向 obj.inner
(obj.inner.print)(); //与上行代码等价 this指向 obj.inner
setTimeout中的this
http://www.cnblogs.com/hutaoer/p/3423782.html
一、setTimeout中的延迟执行代码中的this永远都指向window
二、setTimeout(this.method, time)这种形式中的this,即上文中提到的第一个this,是根据上下文来判断的,默认为全局作用域,但不一定总是处于全局下,具体问题具体分析。
三、setTimeout(匿名函数, time)这种形式下,匿名函数中的变量也需要根据上下文来判断,具体问题具体分析。