JavaScript闭包和意外的-未定义的-返回

JavaScript闭包和意外的-未定义的-返回,javascript,closures,undefined,Javascript,Closures,Undefined,当我试图理解JS闭包时,我编写了以下代码: const outer=函数(){ 设a=10,c=100; 常量内部=函数(){ 设b=20; console.log(a+b);//第5行(30) }; 返回内部; }; 设K=outer(); console.log(K());//第10行(未定义)在代码中,K是执行outer的结果,在本例中,它是函数inner 当您执行K(之前已分配了定义为internal的功能)时,您将获得控制台输出30,即a+b 但是,您也会记录K的返回值,因为内部的函

当我试图理解JS闭包时,我编写了以下代码:

const outer=函数(){
设a=10,c=100;
常量内部=函数(){
设b=20;
console.log(a+b);//第5行(30)
};
返回内部;
};
设K=outer();

console.log(K());//第10行(未定义)
在代码中,
K
是执行
outer
的结果,在本例中,它是函数
inner

当您执行
K
(之前已分配了定义为
internal
的功能)时,您将获得控制台输出30,即
a+b

但是,您也会记录
K
的返回值,因为
内部的
函数没有返回值,所以您会得到
未定义的

尝试修改代码,使
内部
返回一个值,您就会明白我的意思:

const outer=函数(){
设a=10,c=100;
常量内部=函数(){
设b=20;
控制台日志(a+b);
返回a*b;//如果没有此返回,则内部的返回值未定义。
}
返回内部;
}
设K=outer();
console.log(K());

我现在明白了,没有“return”语句的函数将返回未定义的,非常感谢。@Adamdjennaba当答案回答您的问题时,您可以单击答案左上角的灰色复选标记将其标记为已回答
K
不返回任何内容。它只是
console.log
s。更改控制台日志(a+b)
返回a+b
inside
Insider
,它将按照您的期望进行控制台操作。