원형, 원형 체인, 역할 영역, 역할 영역 체인, 폐쇄

6062 단어
문 제 를 보면 다 알 고 있 을 거 라 고 믿 습 니 다. 이것들 은 모두 js 천년 불변 의 면접 문제 입 니 다.
원형, 원형 체인?
무엇이 원형, 원형 체인 입 니까?
원형: 하나의 금 형 에 해당 하 며, 실례 대상 을 생산 하 는 데 쓰 인 다.
원형 체인: 원형 대상 은 포인터 가 구조 함 수 를 가리 키 고 인 스 턴 스 대상 은 또 하나의 포인터 가 원형 대상 을 가리 키 며 하나의 원형 체인 을 형성 하여 최종 적 으로 null 을 가리킨다.
왜 존재 합 니까?
원형: 즉 js 에서 대상 을 대상 으로 하 는 방식 을 실현 하 는 것 이다. 즉, js 는 원형 을 바탕 으로 하 는 대상 이다.
원형 체인: js 가 계승 을 실현 하 는 방식 입 니 다.
역할 영역, 역할 영역 체인?
무엇이 작용 역, 작용 역 체인 입 니까?
작용 역
작용 역 이란 변수 나 함수 가 작용 할 수 있 는 범위 이다.
자 바스 크 립 트 에는 어떤 역할 영역 이 있 나 요?
1. 전역 역할 영역
함수 에서 정 의 된 변 수 를 제외 하고 모두 전역 역할 영역 입 니 다.
밤 을 들다
var a = 10;
function bar(){
    console.log(a);
}
bar();//10

이상 의 a 는 전역 변수 로 곳곳에서 a 를 방문 할 수 있 습 니 다.거위
var a = 10;
function bar(){
    console.log(a);
    var a = 20;
}
bar();//undefined

무슨 귀신 이 야?undefined?
네, 잘못 본 거 아니에요.함수 의 변 수 를 먼저 검색 하여 a 가 존재 하 는 지, 존재 하 는 지, 그리고 a 가 미리 해석 되 었 기 때문에 상승 한 a 는 이곳 의 a 역할 영역 에 연결 되 어 있 기 때문에 결 과 는 undefined 입 니 다.
2. 국 지적 역할 영역
함수 에서 var 로 설명 하 는 변수 입 니 다.
밤 을 들다
var a = 10;
function bar(){
   var a  = 20;
    console.log(a);
}
bar();//20

3. 블록 급 역할 영역 (ES5 까지) 이 없고 ES6 에 블록 급 역할 영역 이 있 습 니 다.
ES6 이전 에는 함 수 를 제외 한 블록 모두 블록 급 역할 영역 을 갖 추 지 못 했다.
흔히 볼 수 있 는 전형 적 인 예:
for(var i=0;i<4;i++){
    setTimeout(function(){
    	console.log(i);
    },200);
}
//4 4 4 4

해결 방법:
for(var i=0;i<4;i++){
    (function(j){
            setTimeout(function(){
    	console.log(j);
    },200);
    })(i)
}
//0 1 2 3

역할 영역 체인
변 수 는 역할 에 따라 어른 함수 1 급 1 급 을 위로 검색 하고 찾 을 때 까지 찾 지 못 하면 오 류 를 보고 합 니 다. 이 과정 은 바로 역할 도 메 인 체인 이 하 는 역할 입 니 다.
var num = 30;
function f1(){
    var num  = 20;
    function f2(){
        var num = 10;
        function f3(){
            var num = 5;
            console.log(num);
        }
        f3();
    }
   f2();
}
f1();

폐쇄 하 다
패 킷 닫 기: js 에서 데이터 와 방법 을 사유 화 하 는 방식.내층 함 수 는 외층 함수 의 변수 와 방법 을 호출 할 수 있다.
전형 적 인 면접 문제
하면, 만약, 만약...
  • go('l') -> gol
  • go()('l') -> gool
  • go()()('l') -> goool
  • var go = function (a) {
    var str = 'go';
        var add0 = function (a) {
        	str += 'o';
        	return a ? str += a : add0;//     
        }
    	return a ? str += a : add0;//     
    }
    console.log(go('l'));//gol
    console.log(go()('l'));//gool
    console.log(go()()('l'));//goool
    

    좋은 웹페이지 즐겨찾기