ES6 학습 튜 토리 얼 의 블록 급 역할 영역 에 대한 상세 한 설명
5189 단어 jses6블록 급 역할 영역
ES5 이전에 javascript 언어 는 함수 역할 영역 과 전역 역할 영역 만 있 었 고 var 를 사용 하여 변 수 를 설명 하 였 으 며,var 성명 의 변 수 는 변수 향상 이 있어 곤 혹 스 러 웠 습 니 다.우 리 는 먼저 ES5 의 var 성명 을 복습 한 다음 에 let 와 const 를 비교 학습 합 시다.
var
var 성명 의 함수 역할 영역 과 전역 역할 영역.
코드 체험:
function getName() {
if (1 + 1 === 2) {
var name = 'xixi';
}
console.log(name);
}
getName();//xixi
c 나 자바 언어 에서 name 은 if 블록 에서 만 사용 해 야 하 는데 if 의 밖에서 도 접근 할 수 있 습 니 다.이것 은 js 에 블록 급 역할 영역 이 없 는 표현 입 니 다.이 폐단 은 for 순환 에서 매우 뚜렷하게 나타난다.
for (var i = 0; i < 10; i ++) {
// ...
}
console.log(i);// 10
var i 의 본 뜻 은 임시 변수 i 를 설명 하 는 것 입 니 다.배열 등 을 옮 겨 다 니 는 데 사 용 됩 니 다.for 순환 하 는 외부 에 접근 하지 말 았 어야 했 는데 지금 은 귀 찮 지 않 습 니까?좋 은 프로그래머 는 블록 급 역할 영역 을 즉시 실행 함수 로 모 의 할 것 입 니 다.원래 저 는 같은 변 수 를 사용 하지 않도록 주의 하 겠 습 니 다.😎。
(function() {
for (var i = 0; i < 10; i ++) {
// ...
}
})();
console.log(i);// undefined
이상:js 에 블록 급 역할 영역 이 없다 는 것 을 알 게 되 었 습 니 다.변 수 는 반복 해서 설명 할 수 있 습 니 다.
var name = 'xixi';
console.log(name);// xixi
var name= ' ';
console.log(name);//
잘못 을 보고 하지 않 고 곤 혹 스 럽 고 곤 혹 스 럽 지 않다.이것 이 바로 변수 가 중복 성명 할 수 있 는 것 이다.변수 향상
function getName() {
console.log(name);
var name = 'xixi';
// ...
}
getName();// undefined
console.log
인쇄 name 은 undefined 입 니 다.왜 틀 리 지 않 았 을 까?js 언어 를 계속 사용 하 는 사람 에 게 는 이 현상 이 이해 하기 쉽다.백 스테이지 에서 전단 지 를 돌 리 는 사람 이 라면 욕 을 해 야 할 것 이다.이른바 변수 향상 이다.간단하게 설명해 드릴 게 요.
var name = 'xixi';
이것 은 우리 가 잘못 쓴 문장 으로 두 가지 과정 을 포함한다.var name; name = 'xixi';
은 각각 변수 성명 과 변수 초기 화 이다.변수 향상:변수 성명 var name 에 관 계 없 이;어떤 위치 에 있 든 지 작용 역 의 상단 에 언급 되 어 진행 된다.
let
ES6 는 변수의 생명 주 기 를 더욱 제어 할 수 있 도록 두 가지 좋 은 특성 let,const 를 도입 합 니 다.블록 급 역할 영역,중복 성명 불가,임시 사구 등 특성 은 var 변수 에 존재 하 는 여러 가지 문 제 를 해결 하 는 데 사용 된다.
블록 급 역할 영역
function getName4ES6() {
if (1 + 1 === 2) {
let name = 'xixi';
}
console.log(name);
}
getName4ES6(); // undefined
드디어{}밖에서 name 에 접근 할 수 없습니다.for 순환 도 쉬 워 졌 습 니 다.for 순환 의 var 를 let 로 바 꿔 보 세 요.같은 블록 급 역할 영역 에서 성명 변 수 를 중복 할 수 없습니다.
function redefineValue() {
let name = 'xixi';
let name = ' ';
}
redefineValue();// Uncaught SyntaxError: Identifier 'name' has already been declared
중복 성명 은 잘못 보 고 될 것 이다.
{
let name = 'xixi';
console.log(name);// xixi
{
let name = 'yibu';
console.log(name); // yibu
}
}
주의:ES6 에서{}은 블록 급 역할 영역 입 니 다.임시 성 사구
function getName4ES6() {
console.log(name);
for (let i = 0; i < 10; i ++) {
}
let name = 'xixi';
// ...
}
getName4ES6();// Uncaught ReferenceError: name is not defined
위의 ES5 에 서 는 name 에 변수 향상 이 존재 합 니 다.값 은 undefined 입 니 다.ES6 에서 또 잘못 보 고 했 습 니 다.어떻게 설명 할 까요?이것 이 바로 임시 사각 지대 의 개념 입 니 다.역할 도 메 인 블록 에서 변수 성명 전에 변 수 를 사용 할 수 없습니다.사용 하면 오류 가 발생 할 수 있 습 니 다.javascript 엔진 은 변수 성명 을 발 견 했 을 때,변수 성명 을 역할 영역의 맨 위(var 성명 변수)로 올 리 거나,변 수 를 임시 사구(let,const 성명 변수)에 놓 거나,임시 사구 에 접근 하면 실행 중 오류 가 발생 합 니 다.
const
const 와 let 역시 블록 급 역할 도 메 인 을 가지 고 있 으 며,임시 적 인 사각 지대 라 는 개념 을 반복 할 수 없습니다.성명 과 동시에 초기 화 되 어야 하 며 변수 인용 은 바 꿀 수 없습니다.
성명 과 동시에 초기 화 해 야 합 니 다.
const name;//Uncaught SyntaxError: Missing initializer in const declaration
값 을 부여 하지 않 으 면 잘못 을 보고한다.이것 도 const 의 본 뜻 이 상수,가 변 적 이지 않 은 값 을 정의 하 는 데 쓰 인 다 는 것 을 잘 이해 할 수 있다.성명 할 때 초기 값 을 제시 하지 않 으 면 다 시 는 기회 가 없다.가 변 할 가치 가 없다
const name = 'x9x9';
name = 'yyy';// Uncaught SyntaxError: Invalid or unexpected token
그럼 상 대 는 어떻게 될까요?
const person = {
name: 'lala',
age: 40
};
person = {};// VM1042:6 Uncaught TypeError: Assignment to constant variable. at <anonymous>:6:8
인용 은 가 변 적 이지 않 습 니 다.대상 의 속성 치가 어떤 지 살 펴 보 겠 습 니 다~
person.name = 'yoyo';
console.log(person);// {name: "yoyo", age: 40}
오류 가 없 으 면 대상 인용 은 변경 할 수 없고 대상 속성 은 변경 할 수 있 습 니 다.let vs const
언제 let 을 사용 하고 언제 const 를 사용 하 는 지 곤 혹 스 러 울 수 있 습 니 다.let 할 수 있 는 const 다 될 것 같 아 요.인터넷 에 서 는 const 를 사용 할 수 있 으 면 let 를 사용 하지 않 고 간단 하고 거 칠 지만 사용 하기 좋다 는 유행 방법 이 있다.
개인 적 인 견해:변수 가 후속 방법 에서 바 뀌 면 let 를 사용 합 니 다.일부 상수 성명 은 const,const 성명 의 변수 이름 을 모두 대문자 로 사용 합 니 다.코드 에 있 는 변 수 는 let 성명 이 라면 가 변 을 의미 합 니 다.const 성명 이 라면 간단 한 데이터 형식 이 든 인용 형식 변수 든 값 을 바 꾸 지 마 십시오.이렇게 하면 절차 가 더욱 건장 해 지고 모두 가 합작 하기에 도 비교적 편리 하 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.