2014-05-23 2 views
0

나는 다음과 같은 자바 스크립트 기능이 :어떻게 두 개의 다른 자바 스크립트 이벤트가이 함수를 다르게 처리합니까?

document.addEventListener('mousemove', onMouseMoved, false); 

console.log(event) GET의 트리거하지만 console.log(_this)

:이 청취자를 추가하면

onMouseMoved = (function(_this) { 
    console.log(_this) 
    return function(event) { 

     console.log(event) 
     return; 
    }; 
    })(this); 

가 어떻게 MouseMove 이벤트 - 이벤트 trigers에게

올를

하지만이 수신기를 추가하면 :

document.addEventListener('mouseenter', onMouseMoved, false); 

그 반대의 이유는 무엇입니까?

+0

가능성이 낮습니다. 받은 콘솔 출력을 표시 할 수 있습니까? – Bergi

+1

'console.log (_this)'는 내부 함수가 처음에 onMouseMoved 변수에 할당되고 다른 시간에는 할당되지 않을 때 발생합니다. – James

+0

@James 어떻게 오셨습니까? – Himmators

답변

4

이벤트 핸들러에서 console.log(this)을 호출하지 않으면 즉각입니다. 즉시 호출되는 함수식 또는 IIFE입니다. onMouseMoved에 할당 된 함수를 실행하여 반환합니다. onMouseMoved가 처음 인스턴스화 될 때

onMouseMoved = (function(_this) { 
    console.log(_this) 
    return function(event) { 

     console.log(event) 
     return; 
    }; 
    })(this); 

    // console.log(_this) has already bee called at this point 
    // onMouseMoved has been set to the returned function: 
    // 
    // function(event) { 
    // console.log(event) 
    // return; 
    // }; 

    document.addEventListener('mousemove', onMouseMoved, false); 

    document.addEventListener('mousemove', onMouseMoved, false); 
1

그건 console.log(_this)에만 호출 될 것입니다.

onMouseMove은 즉시 this의 값으로 호출되는 함수로 정의됩니다 (함수 범위 지정을위한 용도 일 가능성이 높음). 콘솔 로깅 _this은 이벤트 처리 함수 안에 있지 않으므로 이벤트에서 호출되지 않습니다.

관련 문제