JS 범위 문제에 관해서는 면접관들이 인터뷰 중에 항상 묻는 질문입니다. 다음 기사는 주로 javascript 범위에 대한 몇 가지 일반적인 인터뷰 질문을 공유합니다. 참고해서 아래를 살펴보자.
관련 기사 추천: 2020년 js 면접 질문의 가장 완벽한 모음(최신)
이 기사는 주로 javascript 범위 면접 질문에 대한 관련 내용을 귀하와 공유하고 귀하를 위해 공유합니다. 참고하고 공부해 보세요. 아래를 살펴보겠습니다.
1. 범위:
범위를 이해하기 전에 먼저 몇 가지 기본 개념을 이해해야 합니다.
모든 변수 및 함수에는 고유한 작업 범위가 있으며 그 이상으로 사용할 수 없습니다. 범위. 이를 범위라고 합니다.
2. 전역 변수, 지역 변수:
1. 전역 변수:
(1) var a=1;
과 같이 전역 범위에 선언된 변수 var a=1;
(2)只有赋值没有声明的值,如a=2;
(注:如果a=2在函数环境中,也是全局变量)
2.局部变量:
写入函数中的变量,叫做局部变量。
3.作用:
(1)程序的安全。
(2)内存的释放。
三、作用域链:
查找量的过程。先找自己局部环境有没有声明或者是函数,如果有,则查看声明有无赋值或者是函数的内容,如果没有,则向上一级查找。
四、预解析顺序:
每个程序都要做的工作,程序开始先预解析语法,标点符号是否有误,解析内存是否可容纳,解析变量……直到解析无误了,才开始按正常的流程顺序走。试想一下,如果没有预解析顺序,直接按流程顺序走,可能程序执行到最后一个函数,发现了语法错误,才开始报错,那性能要有多差啊!
顺序内容:
1.文件内引用的3f1c4e4b6b16bbbd69b2ee476dc4f83a块依次解析,从上到下连成一片。
2.每个script块内部的var(注意:只解析变量名,不解析值,如var a=2;
将var a解析在环境的开头,并不解析后面的值,只有当程序执行到var a=2
这行时,才会给变量赋值),function解析到本块的开头。
3.依次解析每个环境,将var
,function
(2) a=2;
와 같이 선언된 값이 없는 할당만 해당(참고: a=2가 함수 환경에 있는 경우 전역 변수이기도 함) 2 . 지역 변수:
함수에 작성된 변수를 지역 변수라고 합니다.
(2) 메모리 해제. 3. 범위 체인:🎜🎜🎜수량을 찾는 과정. 먼저 로컬 환경에 선언이나 함수가 있는지 확인하세요. 있다면 선언에 할당이 있는지, 아니면 함수의 내용이 있는지 확인하세요. 🎜🎜🎜🎜4. 사전 구문 분석 순서: 🎜🎜🎜🎜모든 프로그램은 문법을 사전 구문 분석하고, 구두점이 올바른지, 메모리를 수용할 수 있는지, 변수를 구문 분석하는 것으로 시작됩니다. ... 구문 분석이 정확할 때까지 그런 다음 정상적인 프로세스 순서를 따르기 시작했습니다. 사전 구문 분석 순서가 없고 프로세스 순서를 직접 따르면 프로그램이 마지막 기능까지 실행되어 구문 오류🎜, 오류가 보고되기 시작했는데 성능이 얼마나 나쁠까요! 🎜🎜🎜🎜순차 내용: 🎜🎜🎜🎜 1. 파일에서 참조하는 3f1c4e4b6b16bbbd69b2ee476dc4f83a 블록을 순서대로 파싱하여 위에서 아래로 연결합니다. 🎜🎜🎜 2. 각 스크립트 블록 내부의 var(참고: 변수 이름 🎜만 구문 분석하고 값은 구문 분석하지 않음) 예:
var a=2;
는 환경 시작 부분에서 var a를 구문 분석하고 프로그램이 var a=2
줄까지 실행될 때만 후속 값을 구문 분석하지 않습니다. > 변수에 값이 할당되고 함수는 이 블록의 시작 부분으로 구문 분석됩니다. 🎜🎜🎜 3. var
, function
을 환경의 시작 부분까지 파싱하여 각 환경을 차례로 파싱합니다. 🎜🎜🎜🎜 5. 적용 시나리오(몇 가지 일반적인 범위 관련 인터뷰 질문): 🎜🎜🎜var a="aa"; function test(){ alert(a);//undefined,函数执行后,在函数环境内,var a会预解析,当弹出a时,首先先找本层环境内有无声明,发现有。但是代码没有执行到赋值,所以结果是undefined。 var a="bb";//var a会预解析在函数开头,执行到这行才进行赋值 alert(a);//“bb” } test(); alert(a);//"aa" 找全局环境下的声明,找到了var a="aa"
var a="aa"; function test(){ alert(a);//“aa”,函数执行后,在函数环境内,没有找到本层环境关于a的声明,所以开始向上一层环境查找。 a="bb";//执行到这行开始改变全局a的量 } test(); alert(a);//"bb" 全局环境的a在函数执行时已经被改变
function test(){ b();//函数b会被预解析,因此可以调用,执行了输出1; var a=1; function b(){ console.log(1); console.log(a);//undefined var a=2; } } test();🎜🎜🎜 6. 요약: 🎜🎜🎜🎜🎜🎜변수🎜의 범위를 파악하려면 핵심을 이해하는 것이 좋습니다. 사전 파싱 순서를 알고 범위의 범위를 판단합니다. 모두 루틴입니다. 먼저 이 레이어의 환경에 선언이 있는지 살펴보고, 그렇다면 할당이 이루어졌는지 확인하세요. 명령문일 뿐 할당이 없으며 정의되지 않았습니다. 선언이나 할당이 없으면 찾을 때까지 한 단계 상위에서 검색합니다. 모든 실행 환경을 찾을 수 없으면 콘솔은 변수를 찾을 수 없다는 오류를 보고합니다. 🎜🎜함수의 경우 더 간단합니다. 이 레이어의 환경에 사전 구문 분석된 함수가 있는지 확인하고, 그렇다면 실행할 수 있습니다. 그렇지 않다면 여전히 찾아보세요. 🎜🎜🎜관련 학습 권장사항: 🎜javascript 비디오 튜토리얼🎜🎜🎜
위 내용은 JavaScript에 대한 일반적인 면접 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!