JavaScript에서 가장 일반적인 세 가지 문제에 대한 자세한 코드 설명
JavaScript는 모든 최신 브라우저의 공식 언어입니다. 따라서 JavaScript 문제는 다음에서 발생합니다. 다양한 개발자와의 인터뷰 중 JavaScript에서 가장 자주 묻는 세 가지 인터뷰 질문을 주로 공유합니다.
서문이 기사는 JavaScript를 논의할 때 흔히 발생하는 것처럼 최신 JavaScript 라이브러리, 일상적인 개발 관행 또는 새로운 ES6 함수에 관한 것이 아닙니다. 나 자신도 이런 질문을 받았고, 내 친구들도 이런 질문을 받았다고 합니다.
물론 JavaScript 인터뷰 전에 이 3가지 질문만 배워서는 안 됩니다. 더 잘 준비할 수 있는 방법은 많습니다. 다가오는 인터뷰를 위해 – 면접관이 JavaScript 언어에 대한 이해와 DOM 숙달을 확인하기 위해 물어볼 수 있는 3가지 질문은 다음과 같습니다.예제에서는 기본 JavaScript를 사용하겠습니다. 면접관은 일반적으로 jQuery
JavaScript 및 DOM을 이해하는 방법참고: 이벤트 위임, 시간 프록시 등이라고도 합니다. ;애플리케이션을 구축할 때 가끔 사용자가 요소와 상호작용할 때 특정 작업을 수행하려면 이벤트 리스너를 페이지의 버튼, 텍스트 또는 이미지에 바인딩해야 합니다. >
간단한 할 일 목록을 예로 들면 면접관은 다음과 같이 말할 수 있습니다. 사용자가 목록 항목 중 하나를 클릭하면 어떤 작업이 수행될 것으로 예상한다고 말합니다. HTML 코드가 다음과 같다고 가정합니다.<ul id="todo-app">
<li class="item">Walk the dog</li>
<li class="item">Pay bills</li>
<li class="item">Make dinner</li>
<li class="item">Code for one hour</li>
</ul>
document.addEventListener('DOMContentLoaded', function() { let app = document.getElementById('todo-app'); let items = app.getElementsByClassName('item'); // 将事件侦听器绑定到每个列表项 for (let item of items) { item.addEventListener('click', function() { alert('you clicked on item: ' + item.innerHTML); }); } });
이 방법은 작동하지만 문제는 이벤트 리스너를 각 목록 항목에 개별적으로 바인딩한다는 것입니다. 큰 문제는 아니지만 누군가가 할 일 목록에 10,000개를 추가한다면(할 일이 많을 수 있습니다) 그러면 함수는 10,000개의 독립적인 이벤트 리스너를 생성하고 각 이벤트 리스너를 DOM에 바인딩합니다.
면접에서는 먼저 면접관에게 사용자가 입력할 수 있는 최대 항목 수를 물어보는 것이 좋습니다. 10개를 초과하지 않으면 위의 코드가 제대로 작동합니다. 그러나 사용자가 입력할 수 있는 항목 수에 제한이 없다면 보다 효율적인 솔루션을 사용해야 합니다.응용 프로그램이 수백 개의 이벤트 리스너로 끝날 수 있는 경우, 더 효율적인 솔루션은 실제로 하나의 이벤트 리스너를 전체 컨테이너에 바인딩한 다음 실제로 정확한 요소를 클릭할 때 각 이벤트 리스너에 액세스할 수 있도록 하는 것입니다. 이를 이벤트 위임이라고 하며 각 요소에 대해 이벤트 핸들러를 개별적으로 바인딩하는 것이 더 효율적입니다.
이벤트 위임을 사용하는 코드:
document.addEventListener('DOMContentLoaded', function() { let app = document.getElementById('todo-app'); // 事件侦听器绑定到整个容器上 app.addEventListener('click', function(e) { if (e.target && e.target.nodeName === 'LI') { let item = e.target; alert('you clicked on item: ' + item.innerHTML); } }); });
면접관이 언어에 대한 친숙도와 클로저 사용 시기를 알고 있는지 여부를 측정할 수 있도록 인터뷰에서 클로저가 자주 등장합니다.
클로저의 핵심은내부 함수가 범위 밖의 변수에 액세스한다는 것입니다. 클로저는 개인 변수 및 팩토리 함수 생성과 같은 기능을 구현하는 데 사용할 수 있습니다. 클로저 사용에 대한 일반적인 인터뷰 질문은 다음과 같습니다.
정수 목록을 반복하고 3초 지연 후 각 요소의 인덱스를 인쇄하는 함수를 작성합니다.이 문제를 확인하는 가장 일반적이지만 잘못된 방법은 다음과 같은 구현을 사용하는 것입니다.
const arr = [10, 12, 15, 21]; for (var i = 0; i < arr.length; i++) { setTimeout(function() { console.log('The index of this number is: ' + i); }, 3000); }
이유는 setTimeout 함수가 외부 범위(즉, 흔히 클로저라고 부르는 함수)에 액세스할 수 있는 함수를 생성하고 각 루프에 인덱스 i가 포함되어 있기 때문입니다. 3초 후 함수가 실행되고 i의 값이 출력됩니다. 루프 주기는 0,1,2,3,4를 거치고 루프는 최종적으로 4에서 멈춥니다. 4 .
실제로 이 문제를 작성하는 올바른 방법은 여러 가지가 있습니다. 다음은 두 가지입니다.const arr = [10, 12, 15, 21];
for (var i = 0; i < arr.length; i++) {
// 通过传递变量 i
// 在每个函数中都可以获取到正确的索引
setTimeout(function(i_local) {
return function() {
console.log('The index of this number is: ' + i_local);
}
}(i), 3000);
}
const arr = [10, 12, 15, 21];
for (let i = 0; i < arr.length; i++) {
// 使用ES6的let语法,它会创建一个新的绑定
// 每个方法都是被单独调用的
// 更多详细信息请阅读: http://exploringjs.com/es6/ch_variables.html#sec_let-const-loop-heads
setTimeout(function() {
console.log('The index of this number is: ' + i);
}, 3000);
}
문제 #3: 흔들림 방지 기능(디바운싱 )
有一些浏览器事件可以在很短的时间内快速启动多次,例如调整窗口大小或向下滚动页面。例如,如果将事件侦听器绑定到窗口滚动事件上,并且用户继续非常快速地向下滚动页面,你的事件可能会在3秒的范围内被触发数千次。这可能会导致一些严重的性能问题。
如果你在面试中讨论构建应用程序和事件,如滚动,窗口调整大小,或键盘按下的事件时,请务必提及 函数防抖动(Debouncing) 和/或 函数节流(Throttling)来提升页面速度和性能。一个真实的案例,来自 guest post on css-tricks:
在2011年,一个问题在Twitter上被提出:当你滚动Twitter feed时,它会会变得非常慢甚至未响应。John Resig 就这个问题发布了一篇博文,它解释了直接绑定函数到scroll事件上是多么糟糕的事。
函数防抖动(Debouncing) 是解决这个问题的一种方式,通过限制需要经过的时间,直到再次调用函数。一个正确实现函数防抖的方法是:把多个函数放在一个函数里调用,隔一定时间执行一次。这里有一个使用原生JavaScript实现的例子,用到了作用域、闭包、this和定时事件:
// debounce函数用来包裹我们的事件 function debounce(fn, delay) { // 持久化一个定时器 timer let timer = null; // 闭包函数可以访问 timer return function() { // 通过 'this' 和 'arguments' // 获得函数的作用域和参数 let context = this; let args = arguments; // 如果事件被触发,清除 timer 并重新开始计时 clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); } }
当这个函数绑定在一个事件上,只有经过一段指定的时间后才会被调用。
你可以像这样去使用这个函数:
// 当用户滚动时函数会被调用 function foo() { console.log('You are scrolling!'); } // 在事件触发的两秒后,我们包裹在debounce中的函数才会被触发 let elem = document.getElementById('container'); elem.addEventListener('scroll', debounce(foo, 2000));
函数节流是另一个类似函数防抖的技巧,除了使用等待一段时间再调用函数的方法,函数节流还限制固定时间内只能调用一次。所以一个事件如果在100毫秒内发生10次,函数节流会每2秒调用一次函数,而不是100毫秒内全部调用。
总结
위 내용은 JavaScript에서 가장 일반적인 세 가지 문제에 대한 자세한 코드 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

jQuery.val()을 사용할 수 없는 문제를 해결하려면 구체적인 코드 예제가 필요합니다. 프론트 엔드 개발자에게는 jQuery를 사용하는 것이 일반적인 작업 중 하나입니다. 그중에서도 .val() 메서드를 사용하여 양식 요소의 값을 가져오거나 설정하는 것은 매우 일반적인 작업입니다. 그러나 특정한 경우에는 .val() 메서드를 사용하지 못하는 문제가 발생할 수 있습니다. 이 문서에서는 몇 가지 일반적인 상황과 해결 방법을 소개하고 구체적인 코드 예제를 제공합니다. 문제 설명 jQuery를 사용하여 프런트 엔드 페이지를 개발할 때 때때로 다음과 같은 문제가 발생할 수 있습니다.

Yulong 8 Wine Master 시험과 관련된 질문은 무엇입니까? 이에 해당하는 대답은 무엇입니까? 시험에 빨리 합격하는 방법은 무엇입니까? Master of Wine 시험 활동에는 답변해야 할 질문이 많이 있으며, 답변을 참조하여 문제를 해결할 수 있습니다. 이 질문들은 모두 와인에 대한 지식과 관련이 있습니다. 참고가 필요하다면 Yakuza 8 Wine Master 시험 문제에 대한 답변의 자세한 분석을 살펴 보겠습니다! Rulong 8 Wine Master 시험 문제에 대한 자세한 설명 1. "와인"에 관한 질문. 하와이 왕족이 설립한 증류소에서 생산되는 증류주로, 하와이에서 대량으로 재배되는 사탕수수의 설탕을 원료로 만들어집니다. 이 와인의 이름은 무엇입니까? 답: 럼 2. "와인"에 관한 질문입니다. 사진은 건조 인삼과 건조 버무스로 만든 음료를 보여줍니다. 올리브를 첨가한 것이 특징이며 "코크니"로 알려져 있습니다.

JavaScript에서 HTTP 상태 코드를 얻는 방법 소개: 프런트 엔드 개발에서 우리는 종종 백엔드 인터페이스와의 상호 작용을 처리해야 하며 HTTP 상태 코드는 매우 중요한 부분입니다. HTTP 상태 코드를 이해하고 얻는 것은 인터페이스에서 반환된 데이터를 더 잘 처리하는 데 도움이 됩니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. HTTP 상태 코드란 무엇입니까? HTTP 상태 코드는 브라우저가 서버에 요청을 시작할 때 서비스가
