因为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
引用了另一个函数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”的事情有任何想法
因为javascript函数不可序列化,为了有时(尽管很少)将它们传递到新的上下文中,所以将它们字符串化然后在以后重新评估它们可能是有用的,例如:const foo =()...
foo
。例如,对于您的foo
和bar
,如果您想将foo
传递到另一个上下文中,使得bar
也可以被调用,则传递一个声明foo
和bar
的函数,然后返回foo
。例如: