자바스크립트:변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까?
많은 사람들이 댓글에서 이 질문이 너무 많다고 해서 이 질문을 하는 것을 망설이게 되었지만, 저는 여전히 그들의 답변에서 해결책을 찾지 못했습니다. 주로 (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
'sourcecode' 카테고리의 다른 글
sequelize Unknown 열 '*.createdAt'이 '필드 목록'에 있습니다. (0) | 2023.10.31 |
---|---|
문자열에서 새 줄(\n)을 사용하고 HTML에서 동일하게 렌더링 (0) | 2023.10.31 |
배열 값별 MySQL 정렬 순서 (0) | 2023.10.31 |
JavaBeanExecutable HV000254에 Java Enum에 대한 매개 변수 메타데이터가 없습니다. (0) | 2023.10.31 |
오류 수정 방법: '오류: 부트스트랩 툴팁에는 테더가 필요합니다(http://github.hubspot.com/tether/)' . (0) | 2023.10.31 |