es6 함수 의 역할 영역 인 스 턴 스 분석

본 고의 실례 는 es6 함수 중의 작용 역 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
매개 변수의 기본 값 을 설정 하면 함수 가 설명 을 초기 화 할 때 매개 변 수 는 하나의 단독 역할 영역(context)을 형성 합 니 다.초기 화가 끝나 면 이 역할 영역 은 사라 집 니 다.이러한 문법 행 위 는 매개 변수 기본 값 을 설정 하지 않 으 면 나타 나 지 않 습 니 다.

var x = 1;

function f(x, y = x) {
 console.log(y);
}

f(2) // 2

위의 코드 에서 매개 변수 y 의 기본 값 은 변수 x 와 같 습 니 다.함수 f 를 호출 할 때 매개 변 수 는 하나의 단독 작용 역 을 형성한다.이 역할 영역 에서 기본 값 변 수 는 전체 변수 x 가 아 닌 첫 번 째 매개 변수 x 를 가리 키 기 때문에 출력 은 2 입 니 다.
다음 의 예 를 다시 보 자.

let x = 1;

function f(y = x) {
 let x = 2; 
 console.log(y)
}

위의 코드 에서 함수 f 가 호출 될 때 매개 변수 y=x 는 하나의 단독 역할 도 메 인 을 형성 합 니 다.이 역할 도 메 인 에서 변수 x 자체 가 정의 되 지 않 았 기 때문에 외부 변 수 를 가리 키 는 전체 변수 x 입 니 다.함수 호출 시 함수 체 내부 의 국부 변수 x 는 기본 값 변수 x 에 영향 을 주지 않 습 니 다.
이때 전역 변수 x 가 존재 하지 않 으 면 오류 가 발생 합 니 다.

function f(y = x) {
 let x = 2;
 console.log(y)
}

f() // ReferenceError: x is not defined

아래 에 이렇게 쓰 면 잘못 보고 할 수도 있다.

var x = 1;

function foo(x = x) {
 // ...
}

foo() // ReferenceError: x is not defined
위의 코드 에서 매개 변수 x=x 는 하나의 단독 작용 역 을 형성 하고 실제 실행 하 는 것 은 let x=x 이다.일시적인 사구 의 원인 으로 인해 이 코드 는'x 미 정의'를 잘못 보고 할 수 있다.
매개 변수의 기본 값 이 함수 라면 이 함수 의 역할 영역 도 이 규칙 을 준수 합 니 다.아래 의 예 를 보십시오.

let foo = 'outer'

function bar(func = () => foo) {
 let foo = 'inner';
 console.log(func())
}

bar() // outer

위의 코드 에서 함수 bar 의 매개 변수 func 의 기본 값 은 익명 함수 이 고 반환 값 은 변수 foo 입 니 다.함수 매개 변수 가 형 성 된 단독 역할 영역 에 서 는 변수 foo 가 정의 되 지 않 았 기 때문에 foo 는 외부 변 수 를 가리 키 기 때문에 outer 를 출력 합 니 다.
아래 처럼 쓰 면 틀 릴 것 이다.

function bar (func = () => foo) {
 let foo = 'inner'
 console.log(func())
}

bar() // ReferenceError: foo is not defined

위의 코드 에서 익명 함수 안의 foo 는 함수 외층 을 가리 키 지만 함수 외층 은 변수 foo 를 설명 하지 않 아서 잘못 보 고 했 습 니 다.
다음은 더욱 복잡 한 예 다.

var x = 1;
function foo(x, y = function() {x = 2;}) {
 var x = 3;
 y()
 console.log(x)
}

foo() // 3
x // 1

위의 코드 에서 함수 foo 의 매개 변 수 는 하나의 단독 작용 역 을 형성한다.이 역할 영역 에서 먼저 변수 x 를 설명 한 다음 에 변수 y,y 의 기본 값 은 익명 함수 입 니 다.이 익명 함수 내부 의 변수 x 는 같은 작용 역 의 첫 번 째 매개 변수 x 를 가리킨다.함수 foo 내부 에서 내부 변 수 를 설명 합 니 다.이 변 수 는 첫 번 째 매개 변수 x 와 같은 역할 영역 이 아니 기 때문에 같은 변수 가 아 닙 니 다.따라서 y 를 실행 한 후에 내부 변수 x 와 외부 전역 변수 x 의 값 은 변 하지 않 았 습 니 다.
var x=3 의 var 를 제거 하면 함수 foo 의 내부 변수 x 는 첫 번 째 매개 변 수 를 가리 키 고 익명 함수 내부 의 x 와 일치 하기 때문에 마지막 으로 출력 한 것 은 2 이 고 외층 의 전체 변수 x 는 영향 을 받 지 않 습 니 다.
관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기