<js>一个函数的内部函数和一个对象的内部方法

时间:2017-11-22 07:02:44

标签: javascript

&#13;
&#13;
function A() {
  return function B() {
    return this;
  };
}
&#13;
&#13;
&#13;

A = {
  B: function B() {
    return this;
  }
};

为什么this返回窗口对象中的B()而不是function A()对象? JS中的函数是一个对象,为什么它在第二个代码示例中显示的行为不同?

1 个答案:

答案 0 :(得分:2)

您的函数B刚刚在函数A中声明,除了作用域之外,它没有其他函数A。每个函数都有自己的this引用的上下文。默认情况下(表示没有显式/隐式绑定,没有对象)this引用window模式下的non strict对象和undefined模式下的strict

非严格模式

function A() {
  return this;
}

console.log(A());

严格模式

'use strict';

function A() {
   return this;
}

console.log(A());

明确绑定

'use strict';

const obj = { name: 'Object' };

function A() {
   return this;
}

console.log(A.call(obj));

对象绑定

const obj = {
  name: 'Object',
  A() {
     return this;
  }
}

console.log(obj.A());