2016-06-27 2 views
0

이것은 this과 (와) 관련이 없습니다. func.applyfunc.call은 적용되지 않습니다.함수에 'this'가 아닌 문맥을 전달하는 방법

함수의 현재 컨텍스트를 다른 함수로 전달해야합니다. 함수 내에서 명명 된 로컬 변수에 액세스해야한다는 의미입니다.

여기에 다소 인위적인 예입니다

function doSomething(f){ 
    eval(f) 
} 
function test(callback){ 
    doSomething("callback.apply(1, 2)") 
} 
test(function(a, b){ 
    console.log(a + b); 
}) 

가 어떻게 로컬 변수를 callback 그래서 eval 사용할 수 있습니다 doSomething에 전달할 수 있습니다 -이는 인위적인 예입니다 인식하고 있습니다. 이것은 가능한가?

중첩 된 컨텍스트가 전달된다는 것을 알고 있으므로 doSomething 내에서 test을 선언하면이 작업이 작동합니다. 그러나 그것은 저를 돕지 않습니다.

+0

, 나는 부모의 컨텍스트에 액세스하는 것이 가능하다고 생각 작동하지만 것입니다. com/questions/6332017/how-to-get-this-value-of-caller-function)을 사용하십시오. 함수에'this '를 넘기는 데 문제가있는 이유는 무엇입니까? 당신의 문제에 대해 전역 컨텍스트 스택이 작동해야합니까? – Wikiti

+0

실제 문제는 무엇입니까? 아니요, 임의의 함수 컨텍스트에 액세스 할 수 없습니다. – Bergi

+0

평가 범위에서 특정 사항을 주입 할 수있는 평가판을 사용하는 [this snippet] (http://stackoverflow.com/a/24032179/1048572)을 보시길 바랍니다. – Bergi

답변

1

당신이 정말로 eval를 사용하고자하는 경우 ... 당신은 문자열 형식의 인생을 만들고, 당신이 전에하던 거의 길 원하는 인수에 전달할 수 있습니다 :

function doSomething(f) { 
 
    eval(f) 
 
} 
 

 
function test(callback) { 
 
    doSomething('(' + callback.toString() + ')(1, 2)'); 
 
} 
 

 
test(function(a, b) { 
 
    console.log(a + b); 
 
})
을 // 유래 :

+0

영리합니다. 이것은 기본적으로 phantom.js 및 selenium과 같은 브라우저 드라이버입니다. – slebetman

+0

이것은 일반적인 경우가 아니라 특정 경우에 대해 작동합니다. 내 질문에 좀 더 포괄적 이었어야만합니다. 위의 주석을보십시오. –

-1

바인드 (HTTP [그렇지 않은] 유 처음에

function doSomething(f){ 
    eval(f()); 
} 
function test(callback){ 
    doSomething(callback.bind(null,1,2)) 
} 
test(function(a, b){ 
    console.log(a + b); 
}) 
+0

'eval (f)'가 아닌'f()'를 사용합니다. – Bergi

관련 문제