alis4ops.com을 구축하고 있는 아버지를 위해 이 가이드를 작성했습니다.
다음과 같은 기능이 있습니다:
DragDrop.js에 정의된 Baba
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; } function handleMoveTouch(event) { event.preventDefault() if (draggedElement) { const touch = event.touches[0]; // ..more code } }
다음 라인에서 draggedElement에 액세스하고 있습니다.
hanldeMoveTouch는 호출 시 오류를 발생시키지 않습니다.
Chrome DevTools에서 if(daggedElement)에 중단점을 배치하면 draggedElement가 handlerStartTouch의 event.target에서 제공하는 것과 동일한 html 요소로 확인되는 것으로 표시됩니다.
handleStartTouch에 정의되어 있음에도 불구하고 handlerMoveTouch의 draggedElement에 액세스할 수 있는 이유는 무엇입니까?
더 일반적으로, 자바스크립트의 다른 함수에서 함수에 정의된 변수에 액세스할 수 있는 이유는 무엇입니까?
handleStartTouch 함수를 살펴보세요:
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; }
구체적으로 다음 라인:
draggedElement = event.target;
키워드 중 하나를 사용하여 변수 이름 draggedElement를 선언하지 않습니다.
예를 들어 다음과 같이 정의하지 않습니다.
const draggedElement = event.target;
Javascript에서 변수 선언(키워드라고도 함)을 사용하지 않는 경우 JavaScript는 해당 변수를 전역 변수로 간주합니다.
두 가지 함수를 정의하는 다음 예를 살펴보세요.
// Takes in two arguments and returns the sum function add(x, y) { sum = x y return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
Chrome에서 DevTools 열기
콘솔에서 add(1,1)
를 호출합니다.add(1,1) => 2
그런 다음 printStatus를 호출합니다.
printStatus()가 add(x, y)에 정의된 변수 sum에 액세스할 수 있음을 알 수 있습니다.
이는 변수 sum이 다음 키워드 없이 선언되기 때문입니다.
이제 add(x, y) add를 변경하여 합계에 대한 변수 선언을 사용하겠습니다.
// Takes in two arguments and returns the sum function add(x, y) { const sum = x y // use the variable declartion const return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
콘솔 로그에 함수를 다시 정의해 보겠습니다.
새 개발 콘솔을 시작했기 때문에 재정의해야 합니다.
이제 콘솔에서 add(2, 2)를 호출하세요.
printStatus를 호출하여 add(x, y)에 정의된 변수 sum에 액세스할 수 있는지 확인하세요.
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (:9:3) at :1:1
합계가 정의되지 않았다는 오류가 발생함
이는 변수가 함수 내에서 변수 선언(const, let, var)으로 정의될 때 해당 변수의 범위가 함수 내에만 있음을 확인합니다.
변수가 함수 내에서 변수 선언 없이 정의되면 해당 변수의 범위는 전역입니다.
이 내용이 Baba(그리고 이 글을 읽고 있는 다른 사람에게도 도움이 되기를 바랍니다.)
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3