箭头函数在定义时绑定

时间:2016-11-25 15:40:55

标签: javascript

我正在学习es6箭头功能,我怎样才能通过这个测试?

describe('arrow functions have lexical `this`, no dynamic `this`', () => {

it('bound at definition time, use `=>` ', function() {
    var bound = new LexicallyBound();
    var fn = () => getFunction();

    assert.strictEqual(fn(), bound);
});

1 个答案:

答案 0 :(得分:1)

由于getFunction返回的功能没有做任何事情来证明它已关闭this,因此我认为没有任何用途可以使用你这里。

如果目标是证明箭头函数是词法绑定的(也就是说它们关闭this),那么:

it('is lexically bound', function() {
    const obj = {
        arrow: () => {
            return this;
        }
    };
    assert.strictEqual(obj.arrow(), this);
});

如果arrow未关闭this,则会返回obj,而不会返回该回调中this的当前值。

示例:



function it(label, test) {
  try {
    test();
    console.log(label, "OK");
  } catch (e) {
    console.log(label, "FAILED", e.message);
  }
}
const assert = {
  strictEqual(a, b) {
    if (a !== b) {
      throw new Error("a == b was false");
    }
  }
};

it('Arrow function is lexically bound', function() {
  const obj = {
    arrow: () => {
      return this;
    }
  };
  assert.strictEqual(obj.arrow(), this);
});


it('Non-arrow function is not lexically bound', function() {
  const obj = {
    nonarrow: function() {
      return this;
    }
  };
  assert.strictEqual(obj.nonarrow(), obj);
});