如何从开发者控制台调用嵌套在另一个函数中的函数?
如何从控制台调用嵌套在boo()内部的foo()函数
foo()是boo()的私有内部函数,默认只有boo()内部的代码能访问它,全局作用域(包括控制台)直接调用会提示未定义。但可以通过以下几种方式在控制台调用它:
方法1:修改boo函数,暴露foo到外部
如果能修改原代码,最简单的方式是在boo()内部把foo挂载到全局对象,或者作为返回值暴露出来:
function boo(options) { function foo() { console.log("foo被调用了"); } // 方式A:挂载到全局window对象,控制台直接调用foo()即可 window.foo = foo; // 方式B:返回foo,控制台先执行const myFoo = boo(); 再执行myFoo() return foo; var onDrop = function() { foo(); }; }
方法2:利用断点调试获取foo引用(无需改原代码)
如果不能修改原代码,通过浏览器调试工具的断点就能拿到foo的引用:
- 打开浏览器开发者工具(F12),切换到Sources面板;
- 找到定义
boo()的代码文件,在boo()内部任意一行(比如var onDrop = function()这行)设置断点; - 触发
boo()执行(比如页面上调用boo()的操作); - 断点命中后,在控制台直接输入
foo()就能调用,或者执行window.foo = foo;把它挂载到全局,后续无需断点也能调用。
方法3:通过onDrop间接调用
如果onDrop能被外部访问到(比如绑定在某个DOM元素的事件上),可以在控制台直接触发onDrop()来间接调用foo()。比如onDrop是某个元素的ondrop事件处理函数,可执行:
document.getElementById('目标元素ID').ondrop();
如果onDrop存在于某个全局变量中,直接调用onDrop()即可。
内容的提问来源于stack exchange,提问作者K.Yazoglu
相关产品推荐
相关产品推荐

