这与foo.a
无关,this
和func.apply
不适用(没有双关语)。
我需要将函数的当前上下文传递给另一个函数,我的意思是我需要访问函数中的命名局部变量。
这是一个有点人为的例子:
func.call
如何将局部变量function doSomething(f){
eval(f)
}
function test(callback){
doSomething("callback.apply(1, 2)")
}
test(function(a, b){
console.log(a + b);
})
传递给callback
,以便doSomething
可以使用 - 我知道这是一个人为的例子。这甚至可能吗?
我知道嵌套的上下文会继续存在,所以如果我在eval
中声明doSomething
,那就行了。然而,这对我没有帮助。
答案 0 :(得分:1)
如果你真的想要使用eval
...你可以用字符串格式创建一个IIFE,并传递你想要的参数,几乎就像你之前那样:
function doSomething(f) {
eval(f)
}
function test(callback) {
doSomething('(' + callback.toString() + ')(1, 2)');
}
test(function(a, b) {
console.log(a + b);
})

答案 1 :(得分:-1)
bind适用于你
function doSomething(f){
eval(f());
}
function test(callback){
doSomething(callback.bind(null,1,2))
}
test(function(a, b){
console.log(a + b);
})