sourcecode

자바스크립트:변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까?

copyscript 2023. 10. 31. 22:32
반응형

자바스크립트:변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까?

많은 사람들이 댓글에서 이 질문이 너무 많다고 해서 이 질문을 하는 것을 망설이게 되었지만, 저는 여전히 그들의 답변에서 해결책을 찾지 못했습니다. 주로 (1) 그들이 일반적으로 jQuery를 사용하고 있고 (2) 질문에 제가 이해할 수 없는 기술적인 부분이 포함되어 있기 때문입니다.

저는 변수가 포함된 기능이 있습니다.변수에 함수가 할당됩니다.저는 이 개념이 AJAX만의 개념은 아니라고 확신합니다. 하지만 그것이 변화를 가져온다면, 제가 사용하고 있는 맥락입니다.

function iClick(this)
{
    var foo = "I would like to pass this.";

    ajax.onreadystatechange = function (foo) { alert(foo); }
}

함수에 변수를 전달하고 싶습니다.그런데 원래 함수 선언이 없는데 파라미터는 어떻게 지정해야 하나요?저도 할 수 있나요?

다음과 같이 익명 함수에서 해당 변수를 매개 변수로 선언하지 마십시오.

function iClick(this)
{
    var foo = "I would like to pass this.";
    ajax.onreadystatechange = function () { alert(foo); }
}

첫번째 파라미터를 호출할 때foo콜백이 지나가는 건 뭐든 간에foo함수 내부에이전에 선언된 변수를 참조하려면 같은 이름의 매개 변수를 사용하지 않아야 합니다.

이와 같은 기능을 만들 수 있습니다.

var c="hello";

(function(b){
   alert(b) 
})(c);

결과는 "안녕하세요" 입니다.

이 작업을 수행할 수도 있지만 필요하지 않을 수도 있습니다.

function iClick(this)
{
    var foo = "I would like to pass this.";

    ajax.onreadystatechange = (function(thevar) {
        return function () { alert(thevar); };
      })(foo);
}

@John Hartsock이 언급했듯이, 모든 사람들이 정말로 기억해야 할 답은 이것입니다.

var c="hello";

(function(b){
   alert(b) 
})(c);

예를 들어, 그것은 매우 중요합니다.for그 안에 비동기 기능이 있을 때 loop을 실행합니다. 그렇지 않으면 올바른 항목을 얻을 수 없기 때문입니다.

여기서 뭐가 나오냐고요?

for (var i=0; i<5; i++){
  setTimeout(function(){ 
    console.log(i); 
    }, 1000);
}

정확히: 모든 5, 왜냐하면 모든 타이머가 1초 후에 트리거되면 변수가 발생하기 때문입니다.i이미 값에 있습니다.5.

하지만 이렇게 SIAF(Self-Invocated Anonymous Function)를 사용하면

for (var i=0; i<5; i++){
  (function (j){
    setTimeout(function(){ 
      console.log(j); 
      }, 1000);
   })(i);
}

함수가 호출될 때마다 함수의 다른 인스턴스를 실행하고 다른 함수와 마찬가지로 고유한 로컬 변수가 있기 때문에 실제로 작동합니다.단순히 함수를 정의하는 것이 아니라, 바로 실행합니다.();마지막)을 실행할 때마다 다른 변수를 함수에 구문 분석하기 때문에 내부적으로 다른 내부 로컬 변수를 사용하여 함수의 새로운 인스턴스가 생성됩니다.

그런 걸 원하셨을 겁니다

function handleAjaxRequest(params) {
    var context = {'b':'inner', 'c': params['c']};
    function rendered(html) {
      // render
    }
    function gotPart(part) {
        context['a'] = part;
        engine.render(context).addCallback(rendered);
    }
    ajax.getPart(params).addCallback(gotPart);
}

언급URL : https://stackoverflow.com/questions/3946177/javascript-is-it-possible-to-pass-a-variable-into-a-callback-function-that-is-a

반응형