为什么当我直接执行功能时-“未跳过”和“跳过”两行都打印到控制台,而当我将功能存储在变量中并执行时,完整功能却没有执行,而我只得到返回函数?
例如:bad()()将返回两个console.log消息,而good()将仅返回第二个消息。
function bad() {
console.log('didn\'t skip')
return function() {
console.log('skipped')
}
}
var good = bad()
good() // in theory shouldn't this be the same as the execution below?
bad()()
答案 0 :(得分:0)
只要运行didn't skip
函数,就会运行bad
行。首先,它在此行上运行:
var good = bad()
那么当你做
good()
它仅运行skipped
行,因为包含bad
行的didn't skip
函数未运行。
bad()()
同时运行。可能会看到正在发生什么,以便在两行之间添加更多日志记录:
function bad(){
console.log('didn\'t skip')
return function(){
console.log('skipped')
}
}
console.log('assigning')
var good = bad()
console.log('done assigning')
console.log('running good')
good() // in theory shouldn't this be the same as the execution below?
console.log('running bad')
bad()()
答案 1 :(得分:0)
分配好变量后,将打印第一个控制台日志
var good = bad()
该代码已执行,现在,存储在good变量中的是返回的函数
所以,它与执行bad()()
不同答案 2 :(得分:0)
目前您称good()
是console.log("skipped")
的功能。 console.log(" didn't skip")
部分发生在您进行var good = bad()
时。
很难解释,但输出绝对正确。
答案 3 :(得分:0)
当您分配-SNAPSHOT
时,该函数将被执行,控制台将记录var good = bad()
并返回具有didn't skip
的匿名函数。此函数已分配给console.log('skipped')
变量。
因此,现在good
是与good()
返回的匿名函数相同的函数。
因此,致电bad()
将good()
然后调用console.log('skipped')
(显然)会console.log都记录
事件就是这样
var分配->未跳过 good()调用->跳过 bad()呼叫->未跳过,已跳过
bad()