【发布时间】:2020-06-15 23:15:07
【问题描述】:
了解闭包后,我编写了一个函数,该函数返回一个将名称打印到控制台的函数:
let myName = 'steven';
function printName() {
console.log(`OUTER: ${myName}`);
return function printAgain() {
console.log(`INNER: ${myName}`);
};
}
printName(); //Only prints 'OUTER: steven'
const newFunc = printName();
newFunc(); //Prints 'OUTER: steven'
//AND 'INNER: steven'
为什么只有在使用函数表达式时才调用内部函数?为什么当我用 printName() 而不是第二个调用函数声明时,它只运行外部控制台日志?
类似地,如果我调用我的函数表达式newFunc 而不使用括号,它只会打印OUTER: steven。
但是,如果我使用括号并将其命名为newFunc(),它会同时打印OUTER: steven 和INNER: steven。这是为什么呢?
【问题讨论】:
标签: javascript closures function-declaration function-expression