상황은 다소
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
문제는 someVar
의 리스너 함수 내 에서 값이 보이지 않아 addEventListener
새 변수로 취급 될 수 있다는 것입니다.
답변
작성한 코드에는 아무런 문제가 없습니다. 모두 some_function
와 someVar
액세스 할 수 있어야합니다, 경우에 그들은 익명 곳 맥락에서 사용할 수 있었던
function() { some_function(someVar); }
만들어졌습니다.
경고가 원하는 값을 제공하는지 확인하십시오. 익명 함수 범위 내에서 액세스 할 수 있는지 확인하십시오 ( someVar
에 대한 호출 옆에 동일한 변수 에서 작동하는 코드가 더없는 경우 addEventListener
)
var someVar;
someVar = some_other_function();
alert(someVar);
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
답변
왜 이벤트의 대상 속성에서 인수를 가져 오지 않습니까?
예:
const someInput = document.querySelector('button');
someInput.addEventListener('click', myFunc, false);
someInput.myParam = 'This is my parameter';
function myFunc(evt)
{
window.alert(evt.currentTarget.myParam);
}
<button class="input">Show parameter</button>
JavaScript는 프로토 타입 지향 언어입니다. 기억하십시오!
답변
이 질문은 오래되었지만 후손을 위해 ES5의 .bind ()를 사용하는 대안을 제공 할 것이라고 생각했습니다. 🙂
function some_func(otherFunc, ev) {
// magic happens
}
someObj.addEventListener("click", some_func.bind(null, some_other_func), false);
bind에 전달할 인수로 첫 번째 param (다른 함수)으로 리스너 함수를 설정해야하며 두 번째 param은 이제 이벤트가됩니다 (첫 번째 대신) .
답변
필요한 모든 인수를 ‘bind’로 바인딩 할 수 있습니다.
root.addEventListener('click', myPrettyHandler.bind(null, event, arg1, ... ));
이러한 방법으로 당신은 항상거야 event
, arg1
전달 및 기타 물건을 myPrettyHandler
.
http://passy.svbtle.com/partial-application-in-javascript-using-bind
답변
아주 오래된 질문이지만 오늘도 같은 문제가있었습니다. 내가 찾은 가장 깨끗한 해결책은 카레 개념을 사용하는 것입니다 .
그 코드 :
someObj.addEventListener('click', some_function(someVar));
var some_function = function(someVar) {
return function curried_func(e) {
// do something here
}
}
커리 함수의 이름을 지정하면 나중에 실행 시간에 eventListener를 등록 취소하기 위해 Object.removeEventListener를 호출 할 수 있습니다.
답변
함수를 변수로 선언하여 인수로 이벤트 리스너를 추가 및 제거 할 수 있습니다.
myaudio.addEventListener('ended',funcName=function(){newSrc(myaudio)},false);
newSrc
매개 변수로 myaudio를 사용하는 메소드
funcName
는 함수 이름 변수입니다.
리스너를 제거 할 수 있습니다
myaudio.removeEventListener('ended',func,false);
답변
클로저로 알려진 자바 스크립트 기능을 통해 somevar를 값으로 (참조가 아닌) 전달할 수 있습니다 .
var someVar='origin';
func = function(v){
console.log(v);
}
document.addEventListener('click',function(someVar){
return function(){func(someVar)}
}(someVar));
someVar='changed'
또는 다음과 같은 일반적인 랩 함수를 작성할 수 있습니다 wrapEventCallback
.
function wrapEventCallback(callback){
var args = Array.prototype.slice.call(arguments, 1);
return function(e){
callback.apply(this, args)
}
}
var someVar='origin';
func = function(v){
console.log(v);
}
document.addEventListener('click',wrapEventCallback(func,someVar))
someVar='changed'
여기는 다음 wrapEventCallback(func,var1,var2)
과 같습니다
func.bind(null, var1,var2)