如何在不修改定义的前提下让JS代码输出SUCCESS CALLED?
如何在不修改test定义的前提下调用左侧success函数?
先看原代码:
const test = ( (success) => { console.log('SUCCESS CALLED'); }, (error) => { console.log('ERROR CALLED'); } ); test(); // 输出 **ERROR CALLED**
由于逗号表达式的特性,test最终指向右侧的error函数,调用test()会输出ERROR CALLED。现在要问:能不能在不修改test定义的前提下,调用左侧的success函数输出SUCCESS CALLED?
答案是做不到。
原因很简单:逗号表达式只会保留最后一个表达式的结果,左侧的success函数在求值后没有被任何变量或引用持有,执行完赋值语句后,这个函数就成了无引用的垃圾对象,会被JS引擎的垃圾回收机制清理掉,后续没有任何办法再访问到它。
除非在success函数被求值的时候(也就是赋值语句执行的瞬间),函数内部主动把自身挂载到某个全局可访问的对象上,但这里的success函数只是被定义了,并没有被调用过,所以根本没有机会执行内部代码来保存自己。
所以在现有代码的前提下,没有办法调用到这个success函数。
内容的提问来源于stack exchange,提问作者Jaf
相关产品推荐
相关产品推荐

