너 는 아마 가짜 자 바스 크 립 트 를 배 웠 을 거 야!못 믿 겠 으 면 와 봐!

5757 단어 JavaScript
Adobe 의 한 고급 엔지니어 Dmitry Baranovskiy 는 그의 블 로그 에 'So, you think you know JavaScript?' 라 는 블 로그 에 다섯 개의 작은 예 를 붙 였 습 니 다. 여러분 은 가짜 JavaScript 를 배 웠 는 지 확인 해 보 세 요!
if (!("a" in window)) {
    var a = 1;
}
alert(a);
var a = 1,
    b = function a(x) {
        x && a(--x);
    };
alert(a);
function a(x) {
    return x * 2;
}
var a;
alert(a);
function b(x, y, a) {
    arguments[2] = 10;
    alert(a);
}
b(1, 2, 3);
function a() {
    alert(this);
}
a.call(null);

느 꼈 으 면 먼저 당신 의 답안 을 쓴 다음 에 실제 테스트 를 해 보 세 요...........................................................................
블 로 거들 학습 총화
예시 1
예제 1 원형:
분석: 먼저 모든 함 수 를 분석 하고 그 다음은 var 성명 의 변 수 를 분석 하지만 값 을 부여 하지 않 습 니 다.자 바스 크 립 트 는 블록 개념 이 없 기 때문이다.for (var i in array) 와 같은 i 는 여전히 전역 변수 입 니 다.실행 순서: 1. var a; /변 수 를 설명 하지만 2. if 문 구 를 할당 하지 않 습 니 다. 전역 변 수 는 window 의 속성 에 해당 하기 때문에 "a" in window 는 진실 이 고 반 대 는 가짜 입 니 다.대괄호 안의 문 구 를 실행 하지 않 습 니 다.3.alert(a);//undefined
예제 1 변형:
if (("a" in window)) {
        var a = 1;
    }
    alert (a);

실행 결 과 는 1 입 니 다. 어떤 동 화 는 var a = 1 은 if {} 에서 정 의 된 것 으로 국부 변수 에 속 합 니 다. 어떻게 밖에서 꺼 낼 수 있 습 니까?의심 하지 마 세 요. 정말 누가 그렇게 물 어 볼 거 예요. 오늘 한 동료 가 저 에 게 이렇게 물 었 습 니 다.기억 하 세 요. function 블록 입 니 다. for, while, if 블록 은 작용 역 의 구분 기준 이 아 닙 니 다!그래서 이곳 의 a 는 여전히 전역 변수 이다.
예시 2
예시 2 원형:
분석: 자바 스 크 립 트 에서 변 수 를 정의 할 때 여러 개 를 동시에 정의 할 수 있 습 니 다. 예 를 들 어 var a, b, c;변 수 를 정의 할 때 함수 표현 식 을 사용 하면 국부 변수 와 유사 하 며 전역 작용 역 에 접근 하지 않 습 니 다.실행 순서: 1. 두 변수 var a, b 를 설명 합 니 다.그리고 그들 에 게 a = 1, b = function a () {...} 를 부여 합 니 다.이 곳 의 functiona 는 부분 변수 로 외부 에 접근 할 수 없습니다.따라서 전역 a 또는 1. 2. alert (a); /1
예제 2 변형:
이렇게 쓰 면 여러분 이 비교 해 보시 면 조금 더 이해 할 수 있 을 것 같 아 요.
    var a = 1,
     b = function a (x) {
        x && a (--x);
        alert(a);//     a    ,      a    
        return x;//     ,        b   
    };
    alert (a);//          a
    alert (a(1)); //  : a is not a function
    alert(b);
    alert(b(1));

예시 3
예제 3 원형:
분석: js 는 항상 성명 식 함 수 를 먼저 해석 한 다음 에 변 수 를 해석 합 니 다.실행 순서: 1. 해석 함수 a;2. 변수 var a 를 설명 합 니 다.a. 이때 할당 되 지 않 았 기 때문에 원래 의 값 을 가리 키 고 있 습 니 다.즉 function a;3.alert(a);
예제 3 변형:
js 해석 순 서 를 증명 하려 면 코드 위 치 를 바 꾸 십시오.
    var a;
    function a (x) {
        return x * 2;
    }
    alert (a);

예시
예제 4 원형:
분석: 함수 내부 에서 하나의 대상 을 인용 할 수 있 습 니 다. 이것 은 arguments 와 유사 한 배열 이지 만 배열 이 아 닙 니 다.그것 은 함수 의 실제 수신 매개 변수의 집합 을 대표 한다.아래 표 시 를 통 해 해당 매개 변수 에 접근 할 수 있 습 니 다.이 대상 의 일부 속성 을 수정 하면 arguments [index] 와 같이 들 어 오 는 제 index (있 으 면 아래 표 시 는 0 부터) 변수의 값 도 수 정 됩 니 다.실행 순서: 1. 함수 b 를 설명 합 니 다.2. 실행 함수 b (1, 2, 3);여기 서 arguments [2] 와 변수 a 가 인용 한 값 이기 때문에 arguments [2] 가 바 뀌 면 a 도 달라 집 니 다.
예시
예제 5 원형:
call 방법: 문법: call ([thisObj [, arg 1 [, arg 2 [, [, argn]]]]]) 정의: 한 대상 을 호출 하 는 방법 으로 현재 대상 을 다른 대상 으로 교체 합 니 다.설명: 콜 방법 은 다른 대상 을 대체 하여 하나의 방법 을 호출 할 수 있 습 니 다.call 방법 은 함수 의 대상 컨 텍스트 를 초기 컨 텍스트 에서 thisObj 가 지정 한 새로운 대상 으로 변경 할 수 있 습 니 다.thisObj 인 자 를 제공 하지 않 으 면 Global 대상 은 thisObj 로 사 용 됩 니 다.
분석: 콜 방법 은 여러 개의 인 자 를 받 아들 이 는데 그 역할 은 다른 사람의 방법 을 빌려 자신의 방법 으로 삼 는 것 이다.이렇게 하면 실행 할 때 this 가 자신 을 가리 킬 수 있다 는 것 을 보증 할 수 있다.call 방법의 두 번 째 매개 변 수 는 마지막 매개 변 수 를 빌려 온 함수 에 전달 합 니 다.첫 번 째 매개 변 수 는 빌 린 대상 입 니 다. 이 대상 이 비어 있 으 면 전역 window 대상 으로 호출 됩 니 다.함수 의 this 가 window 를 가리 키 는 것 입 니 다.
콜 방법 에 대해 아직 모 르 는 것 은 도 모 나 곡 선생님 께 물 어보 세 요.
상기 다섯 개의 예시 테스트 결과: 1: undefined 2: 1 3: functiona (x) {return x * 2;}
4:1、2、3、undefined、10 5:object Windows

좋은 웹페이지 즐겨찾기