>웹 프론트엔드 >JS 튜토리얼 >js의 변수 승격 및 함수 승격에 대한 자세한 설명

js의 변수 승격 및 함수 승격에 대한 자세한 설명

小云云
小云云원래의
2018-02-06 11:44:591088검색

이 글은 js 기반의 변수 승격과 함수 승격에 대한 글을 가져왔습니다(자세한 설명). 에디터가 꽤 좋다고 생각해서 지금 공유해서 참고용으로 올려보겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

1. 변수 승격

ES6 이전에는 JavaScript에 블록 수준 범위가 없었고(중괄호 {} 쌍은 블록 수준 범위임) 전역 범위와 함수 범위만 있었습니다. 변수 호이스팅은 변수 선언을 해당 범위의 시작 부분으로 호이스팅합니다.

마지막 이력서의 예는 다음과 같습니다.


console.log(global); // undefined
var global = 'global';
console.log(global); // global

function fn () {
console.log(a); // undefined
var a = 'aaa';
console.log(a); // aaa
}
fn();

위의 인쇄 결과가 나오는 이유는 js의 변수 승격 때문입니다. 실제로 위 코드는 다음과 같이 실행됩니다.


var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(global); // undefined
global = 'global'; // 此时才赋值
console.log(global); // 打印出global

function fn () {
var a; // 变量提升,函数作用域范围内
console.log(a);
a = 'aaa';
console.log(a);
}
fn();

2. 함수 개선

js에서 함수를 만드는 방법에는 함수 선언과 함수 리터럴 두 가지가 있습니다. 함수 호이스팅은 함수 선언에만 존재합니다! 예:


console.log(f1); // function f1() {}  
console.log(f2); // undefined 
function f1() {}
var f2 = function() {}

위의 인쇄 결과가 나오는 유일한 이유는 js의 함수 승격으로 인해 코드가 실제로 다음과 같이 실행되기 때문입니다.


function f1() {} // 函数提升,整个代码块提升到文件的最开始<br>console.log(f1);  
console.log(f2);  
var f2 = function() {}

결론: 기본적으로 이것이 필요합니다. 능숙해지려면 더 많은 연습을 할 수 있습니다. 테스트:


console.log(f1()); 
console.log(f2);  
function f1() {console.log(&#39;aa&#39;)}
var f2 = function() {}


(function() {
console.log(a);
a = &#39;aaa&#39;;
var a = &#39;bbb&#39;;
console.log(a);
})();

관련 권장 사항:

javascript 변수 승격에 대한 자세한 설명

js 변수 승격에 대한 자세한 설명 및 함수 선언 사전 구문 분석 예제

JS의 범위 및 변수 호이스팅에 대한 심층적인 이해

위 내용은 js의 변수 승격 및 함수 승격에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.