Classic Q&A
this指向问题
inner = 'window';
function say() {
console.log(inner);
console.log(this.inner);
}
var obj1 = (function() {
var inner = '1-1';
return {
inner: '1-2',
say: function() {
console.log(inner);
console.log(this.inner);
}
}
})();
var obj2 = (function() {
var inner = '2-1';
return {
inner: '2-2',
say: function() {
console.log(inner);
console.log(this.inner);
}
}
})();
say();
obj1.say();
obj2.say();
obj1.say = say;
obj1.say();
obj1.say = obj2.say;
obj1.say();
值得注意的是:
- obj1和obj2定义了两个局部变量inner
- obj1和obj2是两个IIFE函数,执行的结果是返回两个对象,同时每个对象都包含一个闭包函数,在执行这两个闭包函数时,闭包变量inner的值已经确定了
- 作用域是静态的,声明时确定;this是动态的,运行时确定(适用于普通函数)