箭头功能会改变这种情况

时间:2017-09-22 15:37:01

标签: javascript jquery ecmascript-6

箭头功能是否可以通过设计重新定义现有的功能行为?使用jQuery的get(是的,我知道) - 根据是否使用了箭头函数,我得到了两个不同的内部成功值。谁能解释为什么会这样?

var get = (e) => {
    return new window.Promise((resolve, reject) => {
      $.ajax({
        context: {test: 1}, // this
        type: "GET",
        url: "...",
        complete: function () {
          // this is only correct when using old syntax, arrow
          // function would redefine the value of this to the function's parent
        },
        complete: ()=>{ } // Is not working, this is not what I'd expect.
      });
    });

1 个答案:

答案 0 :(得分:1)

箭头函数主要引入以更改this的范围,这有助于避免始终使用.bind(this)。你获得不同的价值是很自然的

来自MDN: Arrow Functions

  

箭头函数表达式的语法短于函数表达式,不绑定自己的,arguments,super或new.target。

更清晰,更简洁的语法具有次要价值。它们肯定不是function

的绝对替代品

现在这已经超出了等式 - 你的示例中还有2个oncomplete回调。