Javascript 为什么这段代码返回的总是未定义的?

Javascript 为什么这段代码返回的总是未定义的?,javascript,ecmascript-6,Javascript,Ecmascript 6,我开始学习ES6并编写了以下代码: 让狗{ s:‘哇’, 对话:=>{console.logthis.s} }; 狗语; 让x=狗说话; x; x、 宾德狗 您将talk属性值定义为arrow函数,这意味着该函数中的值将是函数定义上下文中的值。这不是dog对象,而是let语句出现的地方 如果改用常规函数,代码将按预期工作: let dog = { s:'Woff', talk: function(){ console.log(this.s); } }; console.log(dog.

我开始学习ES6并编写了以下代码:

让狗{ s:‘哇’, 对话:=>{console.logthis.s} }; 狗语; 让x=狗说话; x;
x、 宾德狗 您将talk属性值定义为arrow函数,这意味着该函数中的值将是函数定义上下文中的值。这不是dog对象,而是let语句出现的地方

如果改用常规函数,代码将按预期工作:

let dog = {
  s:'Woff',
  talk: function(){ console.log(this.s); }
};
console.log(dog.talk());
现在,在这个问题的顶部,您的talk函数不会返回任何内容,所以将调用结果传递给该函数将始终返回undefined。在arrow函数版本中,如果返回值是单语句无大括号的函数体,则可能存在返回值,但也可能未定义,因为console.log不返回任何内容。因此:

let dog = {
  s:'Woff',
  talk: function(){ console.log(this.s); return this.s; }
};
console.log(dog.talk());

现在,您将从函数中的console.log以及外部console.log中看到Woff。

console.log返回undefined.1。这里没有任何返回语句,2。你console.logconsole.log…@JaredSmith刚刚检查了文档,因为他有{}block body,据我所知,他需要一个return:我认为每个人都对returns这个词的用法读得太多了……这是一个完美的副本。@FunctionBody:var func=x,y=>{return x+y;//对于块体,显式返回needdi仍然不认为这是完全正确的。console.log不返回值。它输出一个字符串,因此不返回任何内容。因此,输出console.log的返回值将导致未定义。@Brandon yes,同意;我必须弄清楚我想如何解释:答案更新了。带有{}的Arrow函数需要一个return语句。只有当您使用单语句版本时,它才是自动的。@JF哦,您是对的;我错误地看到了原始代码。@JF他们需要一个return语句,当且仅当您想要返回某些内容时…