我是一位有抱负的前端开发人员。我正在阅读一篇关于 JavaScript中的闭包的MDN文章。 MDN文章使用以下两个代码示例来解释基本概念。虽然我理解了基本概念,但我有以下疑问。
displayName();
和return displayName
之间有什么区别?
function init() {
var name = 'Mozilla'; // name is a local variable created by init
function displayName() { // displayName() is the inner function, a closure
alert(name); // use variable declared in the parent function
}
displayName();
}
init();
**
function makeFunc() {
var name = 'Mozilla';
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
答案 0 :(得分:0)
在第一种情况下它正在执行该函数,而在第二种情况下makeFunc
正在返回另一个函数。检查console.log
。这就是()
之后myFunc()
执行makeFunc
function init() {
var name = 'Mozilla';
function displayName() {
alert(name);
}
displayName();
}
init();
function makeFunc() {
var name = 'Mozilla';
function displayName() {
alert(name);
}
// this is returning a function
console.log(displayName)
return displayName;
}
var myFunc = makeFunc();
// since it is returning a function it is getting executed ony after adding () with it
myFunc();
答案 1 :(得分:0)
displayName()和return displayName有什么区别?
不同之处在于,第一个是调用函数displayName
,而第二个是返回它。要查看这意味着什么的示例:
const log = () => console.log('I was invoked!')
const getLog = () => {
return log
}
const doLog = () => {
log()
}
我们有一些功能,当调用时,会打印到控制台。我们还有另外两个函数,一个是返回 log
,另一个是调用它。当我们调用getLog()
时,我们看不到打印到控制台的任何内容。当我们致电doLog()
时,我们会这样做。
另一点是getLog
返回log
的值。所以我们也可以这样做:
const logByDifferentName = getLog()
不会导致log
被调用,而是将其分配给另一个值。