因为 javascript 函数是不可序列化的,为了有时(尽管很少)将它们传递到新的上下文中,将它们字符串化然后稍后重新评估它们会很有用,例如:
const foo = () => { // do something }
const fooText = foo.toString()
// later... in new context & scope
const fooFunc = new Function(' return (' + fooText + ').apply(null, arguments)')
fooFunc() // works!
但是,如果foo引用另一个 function bar,则范围未字符串化,因此如果bar未在新上下文中定义,则评估的 foo 函数将在调用时抛出错误。
我想知道是否有办法递归地对函数进行字符串化?
也就是说,不仅将父函数字符串化,还要将父函数调用的子函数的内容字符串化。
例如:
let bar = () => { alert(1) }
let foo = () => { bar() }
// what toString does
let fooString = foo.toString()
console.log(fooString) // "() => { bar() }"
// what we want
let recursiveFooString = foo.recursiveToString()
console.log(recursiveFooString) // "() => { alert(1) }"
如果您对如何完成诸如“recursiveToString”之类的事情有任何想法,请告诉我
手掌心
jeck猫
波斯汪
相关分类