当前位置: 首页 > 知识库问答 >
问题:

为什么在胖箭头函数定义中没有定义“this”?[副本]

宇文梓
2023-03-14

我先试过这个-

const profile = {
    name: 'Alex',
    getName: function(){
      return this.name;
    }
};

很好用。现在我用胖箭做了同样的事情。在这种情况下,“this”是未定义的。

const profile = {
    name: 'Alex',
    getName: () => {
      return this.name;
    }
};

共有1个答案

张瀚漠
2023-03-14

与常规函数不同,箭头函数没有自己的this,只有常规函数和全局作用域有自己的this

这意味着每当箭头函数中引用this时,它将开始查找作用域以查找this的值,或者在本例中,在查找过程中,它发现对象没有自己的this,因此,它进入全局作用域并将this的值与全局作用域绑定,在全局作用域中它不会找到任何东西。这两个例子会解决你的疑问。

var obj = {
    a : 'object???',
    foo : () => { console.log(this.a) }
};

var a = 'global!!!';

obj.foo();              // global!!!

函数中的换行箭头

var obj = {
    a : 'object???',
    foo : function() {
        return (() => {
            console.log(this.a)
        })();
    }
};

var a = 'global!!!';

obj.foo();

https://github.com/anirudh-modi/js-Essentials/blob/master/es2015/functions/arrow%20functions.md#how-this-is-interfire-for-arrow-functions

 类似资料:
  • 我正在尝试使用JS SDK在Dropbox上上传一个文件。下面是我试图调用函数的html代码: 这是定义函数的文件 但是,由于我不知道的原因,我的函数不能被调用。我得到错误“referenceerror:Dropupload is not defined”,我不知道这是否与问题有关,但我得到另一个错误:“syntaxerror:import declarations may only at top

  • 问题内容: 我正在使用Vue.js创建一个组件。 当我引用中的任何所述的生命周期钩(,,等等)它的计算结果为: 我的计算属性内部也发生了同样的事情: 我收到以下错误: 未捕获的TypeError:无法读取未定义的属性“ bar” 为什么要在这些情况下进行评估? 问题答案: 这两个示例都使用arrow函数,该函数绑定到与Vue实例不同的上下文。 根据文档: 不要在实例属性或回调(例如)上使用箭头功能

  • 在下面的代码中 为什么当console.log(x)时,x是未定义的?

  • 我在chrome控制台中写了这样的表达式: 它返回:

  • 我正在阅读ScrollListView的源代码,在一些地方我看到了的用法。 88号线。 这是的缩写吗?如果有什么不同,又是怎么回事?

  • 问题内容: 在严格模式下使用javascript时,为什么在匿名函数中未定义此函数?我知道为什么这样做可能有意义,但是我找不到任何具体答案。 例: 问题答案: 这是因为,在ECMAscript 262第5版之前,如果使用的人忘记使用该关键字,那会造成很大的混乱。如果在ES3中调用构造函数时忘了使用,请引用全局对象(在浏览器中),然后用变量破坏全局对象。 这是可怕的行为等人在ECMA决定,只是为了集