1

일반적인 사용 사례가 있습니다 (사용 사례에 너무 구체적 일 수 있음).JavaScript - 데이터를 익명 함수로 전달

이 같은 조각했습니다 : 비동기 익명 함수 위의 호출 코드의 흐름 메신저에서

var x=0,y=10; 

var data = {"callback" : function(x,y) {console.log(x,y)}} 

일부를

call(data.callback); 

내 문제는 내가 '돈 코드의 두 번째 작품이다 function을 호출하는 동안 x, y 데이터가 전달됩니다. 그래서 함수 자체의 선언 중에 데이터 (x, y 변수 데이터)를 첨부 할 수있는 방법이 있습니까?

편집 1 :

@Kursad Gulseven 때문에, 내가 그렇게 보여 간단하게.

그러나 실제로는 "데이터", "콜백"은 동적 이름입니다. 그래서, 나는 data.callback을 간단하게 사용할 수 없다.

비록 내가 할 수 있지만, 내 익명의 함수를 호출하려고하는 변수 (데이터 포함)를 가질 수 없습니다. 익명의 함수를 호출하는 것은 여기서 또 다른 비동기 함수에서 다시 발생하기 때문에.

희망 사항은 분명하고 의미가 있습니다.

+1

왜'data.callback (x, y);'를 사용하지 않을까요? –

+3

전화 (data.callback.bind (data, 1, true, "anything else u need")); 당신은 또한 런타임에 호출/적용을 사용할 수 bind()는 새 함수를 작성합니다 – dandavis

+0

@ dandavis, 당신의 대답은 내 문제를 해결하는 것 같다. 그것을 확인하자. –

답변

1

데이터 개체에 x 및 y를 사용할 수있는 경우이를 입력하십시오.

data = { 
 
    x: null, 
 
    y: null, 
 
    "callback": function(x, y) { 
 
    x = x || this.x; 
 
    y = y || this.y; 
 
    console.log(x, y); 
 
    } 
 
} 
 

 
data.x = 0 
 
data.y = 10; 
 

 
// I'm assuming here you have a way to know how the "data" object is called 
 
// and how to access it. (the obejct it's attached to) 
 
// For simplicity, I used a global 
 

 
var dataName = 'data', 
 
    callbackName = 'callback'; 
 

 
//using a wrapper function without parameters, like in your example 
 
// call(data.callback); 
 

 

 
//calling without parameters 
 
window['data']['callback'](); 
 

 
// calling with parameters 
 
window[dataName][callbackName](15, 25);

참고 : 는 비동기 호출의 어떤 종류를 x와 y를 취득하는 경우, 당신은 내가 왜 당신이 할 수 있는지 모르겠어요 promise pattern

1

확인 싶어 수도 ' data.xdata.y을 설정 한 다음 다른 답변에 언급 된 값을 읽으십시오. 즉, 만족스럽지 못한 경우 xy를 얻을 때, 아마도 당신은 지금처럼 폐쇄 (xy 사전에 함수를) 만들 수 :

function setCallback(x,y){ 
    return (function(){console.log(x,y);}); 
} 
data.callback=setCallback(0,10); 

data.callback

다음 당신이 x하고있는 경우를 제외하고이 같은 기능을 y을 입력하십시오.

data.callback();을 실행하면 콘솔에 0 10이 표시됩니다.

관련 문제