Skip to content

Arrow functions' lexical binding is not working correctly #735

@smfoote

Description

@smfoote

The arrow function is supposed to bind to the scope in which it is defined (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), and the this of an arrow function should not be able to change. As shown in the code below (run with the --harmony_arrow_functions), the arrow functions are not correctly binding.

var obj = {
  init: function() {
    this.handle(this.cb);
  },
  cb: val => {
    console.log(this.val);
    console.log(val);
    return val + this.val;
  },
  handle: function(cb) {
    console.log(cb(3));
  },
  val: 5
};

console.log('calling cb directly');
console.log(obj.cb(3));
// 5
// 3
// 8

console.log('calling cb via init');
obj.init();
// undefined
// 3
// NaN

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions