es5와 es6 범위의 차이점은 무엇입니까
차이점: es5에는 전역 범위와 함수 범위라는 두 가지 유형의 범위만 있는 반면, es6에는 전역 범위, 함수 범위, 블록 수준 범위의 세 가지 범위가 있습니다. . 블록 수준 범위의 역할: 내부 범위 변수의 승격으로 인해 외부 변수가 덮어쓰이는 문제를 해결하고 루프 계산에 사용되는 변수가 전역 변수로 누출되는 것을 방지할 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터
범위 측면에서 es5와 es6의 차이점:
범위에는 두 가지 유형만 있습니다. es5: 전역 범위 도메인 및 함수 범위
es6에는 세 가지 유형의 범위가 있습니다: 전역 범위, 함수 범위 및 블록 수준 범위
ES5에서는 전역 범위와 함수 범위만 ES5에서 사용됩니다.
변수는 var로 선언됩니다. var로 선언된 변수는 전역 범위 또는 로컬 범위에 존재할 수 있습니다. 구체적인 상황은 다음과 같습니다
글로벌 범위를 갖는 세 가지 상황입니다.
a. 함수 외부에 선언된 변수는 전역 범위를 갖습니다.b. 직접 할당을 위해 정의되지 않은 변수는 자동으로 전역 변수로 선언됩니다.
c. 창 개체의 속성에는 전역 범위가 있습니다.2. 범위( 함수 범위)
함수 본문의 변수 범위
함수 내부에 정의된 변수는 함수 내에서만 액세스할 수 있습니다.
-
예var a = 1; console.log(a);// 1 此处a为全局变量,在全局作用域下都可访问得到 b = 2 console.log(b); // 2 此处b未被var定义,而是被直接赋值,自动声明为全局变量 function fun() { var c = 3; console.log(c);//3 此处c存在在函数作用域中,仅在函数fun中可访问 } fun() console.log(c);// undefined 全局作用域下访问函数作用域中的变量c,得到undefined
로그인 후 복사
블록 수준 범위는 자체 범위를 형성할 수 있는 중괄호 {}로 묶인 콘텐츠로 간단히 이해될 수 있습니다. 블록 수준 범위의 변수는 let 및 const
블록 수준 범위가 필요한 이유는 무엇입니까?
1. 내부 범위 변수의 승격으로 인해 외부 변수가 덮어쓰이는 문제 해결
var i = 5; function fun(){ console.log(i);//undefined if(true){ var i = 6 console.log(i);//6 } } fun()
실행 결과
함수 fun의 변수 i는 var를 사용하여 선언됩니다. 소위 변수 호이스팅은 함수 선언과 변수 선언이 인터프리터에 의해 항상 메서드 본문의 맨 위로 조용히 "호이스팅"되는 것을 의미합니다. 따라서 여기서 i는 함수 fun의 맨 위에 미리 도달하는 것과 동일하지만 i = 6이 실행 중일 때 할당은 여전히 수행됩니다. 위 코드는 실제로 다음과 동일합니다.var i = 5; function fun(){ var i; console.log(i); if(true){ i = 6 console.log(i) } } fun()
첫 번째 i가 인쇄되면 i는 다음과 같습니다. 선언되었지만 아직 할당되지 않았습니다(if 문에서 i에 값 6이 할당됨). 따라서 첫 번째로 인쇄된 i는 정의되지 않았고 두 번째로 인쇄된 i는 6

var i = 5; function fun(){ console.log(i);//5 if(true){ let i = 6 console.log(i);//6 } } fun()
if에서 변수 i를 선언하기 위해 let을 사용하는 경우 , 그러면 if 문이 위치한 중괄호 { }는 블록 수준 범위를 형성하고, 이 범위에서 선언된 변수는 이 영역에 "바운드"되어 더 이상 외부 영향(즉, 임시 중단)의 영향을 받지 않습니다. zone) 따라서 fun 함수를 실행할 때 첫 번째 i 출력은 전역 범위에서 var i=5이고, if 문의 i 출력은 블록 수준 범위에서 선언된 let i=6입니다2. 루프 계산에 사용되지 않습니다. 변수가 전역 변수로 유출됩니다.
for(var i = 0; i < 3; i++){ doSomething() } console.log(i)//3
위 코드는 루프에서 사용하기 위해 var로 i 변수를 선언합니다. 이상적으로 i는 루프 본문 내에서만 유효해야 합니다. 노출되고 전역 범위에 있으므로 루프가 끝난 후에도 i의 값은 여전히 전역적으로 액세스할 수 있습니다for(let i = 0; i < 3; i++){
console.log(i)
}
console.log(i)//undefined
블록 수준 범위의 특성
1. let으로 선언된 변수는 범위( 현재 중괄호 안에 있음) 임의 중첩이 허용되며 각 수준은 별도의 범위입니다
2. 내부 범위는 외부 범위 변수와 동일한 이름을 가질 수 있습니다(서로 간섭하지 않고 범위를 사용하지 않음)3. let은 현재 범위 최상위에만 존재할 수 있습니다
참고: if 문과 for 문에서 { }에 let 또는 const로 선언된 변수/상수가 있는 경우 { }의 범위도 블록 범위에 속합니다
scope에 대한 예
【 관련 추천: javascript 비디오 튜토리얼<script type="text/javascript"> { var a = 1; console.log(a); // 1 } console.log(a); // 1 // 可见,通过var定义的变量可以跨块作用域访问到。 (function A() { var b = 2; console.log(b); // 2 })(); // console.log(b); // 报错, // 可见,通过var定义的变量不能跨函数作用域访问到 if(true) { var c = 3; } console.log(c); // 3 for(var i = 0; i < 4; i++) { var d = 5; }; console.log(i); // 4 (循环结束i已经是4,所以此处i为4) console.log(d); // 5 // if语句和for语句中用var定义的变量可以在外面访问到, // 可见,if语句和for语句属于块作用域,不属于函数作用域。 { var a = 1; let b = 2; const c = 3; { console.log(a); // 1 子作用域可以访问到父作用域的变量 console.log(b); // 2 子作用域可以访问到父作用域的变量 console.log(c); // 3 子作用域可以访问到父作用域的变量 var aa = 11; let bb = 22; const cc = 33; } console.log(aa); // 11 // 可以跨块访问到子 块作用域 的变量 // console.log(bb); // 报错 bb is not defined // console.log(cc); // 报错 cc is not defined } </script>로그인 후 복사,
web front-end위 내용은 es5와 es6 범위의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











typedef struct는 C 언어에서 구조 사용을 단순화하기 위해 구조 유형 별칭을 만드는 데 사용됩니다. 구조 별칭을 지정하여 기존 구조에 새 데이터 유형의 별칭을 지정합니다. 향상된 가독성, 코드 재사용 및 유형 확인 등의 이점이 있습니다. 참고: 별칭을 사용하기 전에 구조를 정의해야 합니다. 별칭은 프로그램에서 고유해야 하며 선언된 범위 내에서만 유효해야 합니다.

Java의 변수 예상 값 예외는 변수 초기화, null 값 사용, 지역 변수 범위 파악을 통해 해결할 수 있습니다.

JavaScript 클로저의 장점에는 변수 범위 유지, 모듈식 코드 활성화, 실행 지연 및 이벤트 처리가 포함됩니다. 단점에는 메모리 누수, 복잡성 증가, 성능 오버헤드 및 범위 체인 효과가 포함됩니다.

C++의 #include 전처리기 지시문은 외부 소스 파일의 내용을 현재 소스 파일에 삽입하고 해당 내용을 현재 소스 파일의 해당 위치에 복사합니다. 표준 입출력 함수를 포함하기 위한 #include <iostream>과 같이 코드에 필요한 선언이 포함된 헤더 파일을 포함하는 데 주로 사용됩니다.

C++ 스마트 포인터의 수명 주기: 생성: 스마트 포인터는 메모리가 할당될 때 생성됩니다. 소유권 이전: 이동 작업을 통해 소유권을 이전합니다. 해제: 스마트 포인터가 범위를 벗어나거나 명시적으로 해제되면 메모리가 해제됩니다. 객체 소멸: 가리키는 객체가 소멸되면 스마트 포인터는 유효하지 않은 포인터가 됩니다.

할 수 있다. C++에서는 중첩된 함수 정의 및 호출을 허용합니다. 외부 함수는 내장 함수를 정의할 수 있고 내부 함수는 범위 내에서 직접 호출할 수 있습니다. 중첩된 함수는 캡슐화, 재사용성 및 범위 제어를 향상시킵니다. 그러나 내부 함수는 외부 함수의 로컬 변수에 직접 액세스할 수 없으며 반환 값 유형은 외부 함수 선언과 일치해야 합니다.

JavaScript에서 이 포인팅 유형은 다음을 포함합니다: 1. 전역 객체, 2. 함수 호출, 3. 생성자 호출, 5. 화살표 함수(외부 상속). 또한, 바인딩(), call() 및 apply() 메서드를 사용하여 이것이 가리키는 내용을 명시적으로 설정할 수 있습니다.

Vue에서는 let과 var 사이에 변수를 선언할 때 범위에 차이가 있습니다. 범위: var에는 전역 범위가 있고 let에는 블록 수준 범위가 있습니다. 블록 수준 범위: var는 블록 수준 범위를 생성하지 않으며, 블록 수준 범위를 생성합니다. 재선언: var는 동일한 범위에 있는 변수의 재선언을 허용하지만 let은 허용하지 않습니다.
