웹 프론트엔드의 경우 면접 중에 반드시 JS 면접 질문을 접하게 됩니다. 오늘은 각 질문이 인상적인 JS 면접 질문을 요약해 보겠습니다.
사전 분석: 현재 역할에서 domain, js가 실행되기 전 var, function 키워드는 미리 선언해두지만 할당은 안해줍니다(개인의견)
어려워서가 아니라 해야해서 사전파싱이 감동이네요 조심하고 조금 부주의하게 대답하세요. 저는 분석 전 질문을 두 개 이상 접했는데, 그 중 두 가지를 아직도 기억하고 있습니다.
2-1. 사전분석 1
alert(a) a(); var a=3;function a(){ alert(10) } alert(a) a=6; a();
------------분리선------
alert(a) a(); var a=3; var a=function(){ alert(10) } alert(a) a=6; a();
보세요. 이 코드에 접근했을 때 잘못된 답을 얻었습니다. 나중에 친구에게 조언을 구했는데 스스로 이해하고 바로 잡았습니다!
실제로 테스트 포인트는 두 가지가 있습니다. 첫 번째는 변수를 미리 선언하는 것이고, 두 번째는 변수 선언 전에 함수를 선언하는 것입니다!
첫 번째 부분의 결과를 간략하게 분석하겠습니다.
1. 함수 선언이 변수 선언보다 우선하므로 처음에는 a가 function a(){alert(10)}이고 이 함수가 표시됩니다.
2.a(), 함수가 실행되면 경고(10)가 나타납니다
3. Var a=3이 실행되므로 경고(a)는 3
4를 표시합니다. a(), 오류가 보고됩니다.
작업 결과의 두 번째 부분:
1.underfind
2. 오류 보고
앞서 언급했듯이 사전 구문 분석은 var 및 function 키워드를 사용한 사전 선언이지만 값 할당은 없습니다. 그래서 처음에는 underfind였고, a()가 실행될 때 a가 함수가 아니기 때문에 오류가 보고되었습니다.
함수 표현식, 변수 선언과 같음
var a=function(){ alert(10) }
function a(){ alert(10) }
var a=0;function aa(){ alert(a) a=3 }
------------1줄 구분------
var a=0;function aa(){ alert(a) var a=3 } aa();
------ - ----2번째 줄------
var a=0;function aa(a){ alert(a) var a=3 } aa(5) alert(a)
우선순위가 그보다 높습니다. 변수 a
------------라인 3 구분------
var a=0;function aa(a) {
Alert (a)
a=3
}
aa(5)
alert(a)
//5,0 함수 본문에서 Alert(a)를 실행하고 a=3을 실행하면 수정되는 것은 전역 변수가 아닙니다. 변수 a, 그러나 매개변수 a
------------4행 구분------
var a=0;function aa(a){ alert(a) var a=3 alert(a) } aa(5)
// 이게 좀 이해가 안가네요. 인터넷으로 조언을 구했는데 답변이 2가지네요. (이해하시는 분들은 댓글로 조언 부탁드립니다.)
//1. 우선순위가 변수 선언보다 높으므로 변수 a의 선언은 실제로 무시됩니다. 이는
//var a=0;
//function aa(a){
// var a=5;
//와 같습니다. Alert(a)
// a=3
// Alert( a)
//}
//aa(5)
//2. 형식 매개변수와 지역 변수는 우선순위가 동일하며 이는
/와 동일합니다. /var a=0;
//function aa(a){
// var a; 먼저
선언 // a=5 형식 매개변수와 변수 이름이 동일하므로 다룹니다!
//alert(a)// a=3//alert(a)
//}
//aa(5)
------------5행 구분-- ----------------
var a=0;function aa(a){ alert(a) a=3 alert(a) } aa() alert(a) //underfind 3 0
3. 루프와 재귀
var arr=[];for(var i=0;i<10;i++ ){ i<=1?arr.push(1):arr.push(arr[i-1]+arr[i-2]); } console.log(arr)
어떻게 하나요? 그 당시 제 접근 방식은 앞면을 보여주고 뒷면을 보여 주는 방식으로 작성되었습니다. 코드가 너무 많아 나중에
//01234543210 //先展示前面的 01234 //n:开始的数字 m:结束的数字function num1(n,m){ for(var i=n;i<m;i++){ //再展示后面的 543210 console.log(i); if(i===m-1){ num2(n,m) } } }function num2(n,m){ for(var i=m;i>=n;i--){ console.log(i) } } num1(2,5) //2345432
에 대해 공부했습니다. follow
1. 먼저 num(2,5)를 실행하면
function num(n,m){ console.log(n); if(n<m){ num(n+1,m); console.log(n); } } num(2,5) //2345432
이고 그 다음은
console.log(2); -> num(3,5); -> console.log(2); //执行num(3,5); 就是是相当于 console.log(3); -> num(4,5); -> console.log(3); 下面以此类推 console.log(2); -> console.log(3); -> num(4,5); -> console.log(3); -> console.log(2);
공과 마우스 사이의 상호 작용을 구현하기 위해 캔버스를 사용하는 방법
캔버스를 사용하여 효과를 만드는 방법 입자 분수 애니메이션
위 내용은 최신 JS 면접 질문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!