Eli*_*ias 5 javascript browser callstack console.log
当我console.log()
直接从函数调用时,我调用的堆栈(函数和文件)在开发工具控制台中是正确的,正如预期的那样。
main.js
:
function main() {
// Works correctly
console.log('Hello from main()!');
}
Run Code Online (Sandbox Code Playgroud)
安慰:
Hello from main()! ... main.js:3
Run Code Online (Sandbox Code Playgroud)
现在,当我添加第二个文件debug.js
并console.log
从那里调用时,我调用的文件是debug.js
,这是正确的...但我需要debug()
像在main.js
. 不知何故,我需要修改调用者、堆栈或跟踪来欺骗console.log()
它是从 调用的main.js
,而实际上是从deubg.js
.
debug.js
:
function debug(msg) {
console.log(msg)
}
Run Code Online (Sandbox Code Playgroud)
main.js
function main() {
debug('Hello world!') // debug() in debug.js
}
Run Code Online (Sandbox Code Playgroud)
目前的行为:
function main() {
debug('Hello world!') // debug() in debug.js
}
Run Code Online (Sandbox Code Playgroud)
我想要的行为:
Hello world! ... debug.js:2
Run Code Online (Sandbox Code Playgroud)
我相信这里的问题是控制台日志通常从它运行的任何地方执行。但是,如果您要传回一个执行控制台日志的函数,这可能会如您所愿。你可以试试下面的代码吗?
调试.js:
function debug(msg) {
return (function(msg) { console.log(msg) })(msg)
}
Run Code Online (Sandbox Code Playgroud)
主要.js:
function main() {
debug('Hello world!')
}
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,你可以试试这个:
调试.js:
function debug() {
return function(msg) { console.log(msg) }
}
Run Code Online (Sandbox Code Playgroud)
主要.js:
function main() {
debug()('Hello world!')
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
351 次 |
最近记录: |