[英]anonymous functions javascript, how to access source code?
我有一些JS代码进入一个随机的匿名js函数。 我希望该代码(例如alert('hello')
)转储/警告注入它的整个脚本块/对象。
有点像document.body.innerHTML,但对于匿名功能块
结果应该是这样的:
Function()({ somecode; MyAlert(...) } )()
要么
Try { some code; mycode; } catch(e) { }
注意你的条款。 “(浏览器)脚本块”字面意思 是规范中的 脚本元素代码 。 使用“javascript block” 或 “javascript object”表示块 或 对象 。 不要制造令人困惑的新条款; 做阅读和研究。
块不是对象; 他们是语言陈述。 就像你不能“获取当前行的代码/变量”, 你不能“获取当前块的代码/变量” ,尝试块或不。
退一步,现在您可以使用Function.caller
来获取调用代码的函数 :
var mycode = function me(){ if ( me.caller ) alert( me.caller.toString() ); }; (function(){ var some = 'code'; mycode(); })(); // Alert "function(){ var some = 'code'; mycode(); }", even when it is anonymous
请注意,您将获得整个函数的代码,而不是功能块的代码,它不包括参数和函数名称。
Function.caller将来可能会被删除 ,例如arguments.caller
。 (两者都很麻烦。如果调用堆栈上的交叉原点函数包含私有api密钥代码怎么办?js引擎如何内联你的代码呢?)
当时间到了,或者当调用者为空时 (当它是全局代码时),你仍然可以获得文本 new Error().stack
跟踪 ( new Error().stack
)和当前脚本元素 ( document.currentScript
),但是它们的功能很漂亮有限。
您可以使用textContent或innerHTML属性获取脚本元素的代码(如果有)。
你的问题听起来像一个XY问题 。 你想做的事情不是现代语言的意思,而是永远不会说出什么目的。 试着描述你真正的问题。
函数具有toString()
方法。 (是函数有方法!)
var fn = function() { alert('hello') };
fn.toString() // "function() { alert('hello') };"
所以你可以提醒它:
alert(fn.toString());
您可以将其记录到js控制台:
console.log(fn.toString());
甚至可以将其写入页面。
document.getElementById('someID').innerHTML = fn.toString();
但是,这不适用于Universe中的每个函数。
[].push.toString()
"function push() { [native code] }"
有些函数不是用javascript实现的,而是在浏览器或JS引擎的编译代码中实现的。 对于这些环境提供的功能,您将获得上述不太有用的输出。
如果你没有处于严格模式,你可以使用(非标准) .caller
从可引用的东西(即命名函数表达式) .caller
function getFunctionReference(callback) {
var ref = getFunctionReference.caller;
if (callback) callback(ref);
return ref;
}
现在你可以做点什么了
(function () {
getFunctionReference(alert);
}());
// alerts the .toString of the IIFE
这仅适用于函数 ,不能在顶级代码上执行此操作。
探索代码的最佳方法实际上是使用Console ,您可以使用debugger;
声明或断点,以确切了解发生的事情和时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.