classic questions

2021/03/15 Classic 共 1001 字,约 3 分钟

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是动态的,运行时确定(适用于普通函数)

[1]

Search

    Table of Contents