在学习闭包时,我编写了一个函数,该函数返回一个将名称打印到控制台的函数:
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
AND INNER: steven
。这是为什么?