Javascript 为什么在变量内部执行函数与直接执行函数有区别?
为什么当我直接执行函数时,“没有跳过”和“跳过”两行都会打印到控制台,而当我将函数存储在变量中并执行它时,不会执行完整的函数,而我只得到返回函数 例如:bad()将同时返回console.log消息,good()将只返回第二条消息Javascript 为什么在变量内部执行函数与直接执行函数有区别?,javascript,Javascript,为什么当我直接执行函数时,“没有跳过”和“跳过”两行都会打印到控制台,而当我将函数存储在变量中并执行它时,不会执行完整的函数,而我只得到返回函数 例如:bad()将同时返回console.log消息,good()将只返回第二条消息 函数坏(){ console.log('没有跳过') 返回函数(){ console.log('跳过') } } var good=bad() good()//理论上这不应该与下面的执行相同吗? bad()每当运行bad函数时,没有跳过运行的行。首先,它在这条线上运
函数坏(){
console.log('没有跳过')
返回函数(){
console.log('跳过')
}
}
var good=bad()
good()//理论上这不应该与下面的执行相同吗?
bad()
每当运行bad
函数时,没有跳过运行的行。首先,它在这条线上运行:
var good = bad()
那么当你这么做的时候
good()
它只运行跳过的
行,因为包含未跳过的
行的坏的
函数没有运行
bad()()
两者都有。这可能有助于了解在两行之间添加更多日志记录的情况:
函数坏(){
console.log('没有跳过')
返回函数(){
console.log('跳过')
}
}
console.log('assigning')
var good=bad()
console.log('done assigning')
console.log('running good')
good()//理论上这不应该与下面的执行相同吗?
console.log('running bad')
bad()()
当您分配好的变量时,会打印第一个控制台日志
var good = bad()
代码被执行了,现在,存储在good变量中的是返回的函数
因此,它与调用good()
good()时的执行bad()()不同,good是console.log(“跳过”)
的一个函数。当您执行var good=bad()
时,出现了console.log(“未跳过”)
部分
这很难解释,但输出完全正确。当您指定函数执行时,console会记录没有跳过的,并返回具有console.log('skipped')
的匿名函数。此函数分配给good
变量
现在,good()
是一个函数,它与bad()
返回的匿名函数相等
因此调用good()
将console.log('skipped')
然后调用bad()
将(显然)同时记录这两个命令
所以事件是这样的
var赋值->没有跳过
好的()调用->跳过
错误()调用->未跳过,已跳过
函数坏(){
console.log('没有跳过')
返回函数(){
console.log('跳过')
}
}
var good=bad()//控制台日志没有跳过
good()//已跳过控制台日志
bad()()//控制台日志没有跳过,跳过了
在我看来很好……我编辑了您的问题,以便我们可以运行它。我在日志中看到两条没有跳过
和两条跳过的
消息。因此,当您运行var good=bad()
时,您将获得第一个日志,当您运行good()
时,您将获得第二个日志,因为bad()
将执行第一个控制台。log
然后返回一个函数。调用第二个函数执行第二个console.log()
Well good将只运行第二个函数,因为您已经运行了bad。。IOW:var good=bad()//bad已经在这里运行了
,所以当函数存储在变量中,并且这些函数被这些变量再次执行时,完整的函数不会执行吗?只有返回函数中存储了什么?是的,没错,但是你也应该阅读闭包,它会帮助你理解@AndrewTang,很高兴我能提供帮助。如果这个答案解决了你的问题,请评分并接受。谢谢:d