English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JavaScript의 함수 정의는 특징이 하나가 있습니다. 함수 바디의 모든 문장을 스캔하고, 모든 선언된 변수를 함수의 최상단으로 '상승'시킵니다:
'use strict'; function foo() { var x = 'Hello, '; + y; alert(x); var y = 'Bob'; {} foo();
strict 모드는 아니지만, 문장 var x = 'Hello, '; + y;에 오류가 발생하지 않지만, 이는 변수 y가 나중에 선언되었기 때문입니다. 그러나 alert는 'Hello, undefined'을 표시하며, 변수 y의 값이 undefined임을 보여줍니다. 이는 JavaScript 엔진이 변수 y의 선언을 자동으로 상승시키지만, 변수 y의 할당을 상승시키지 않기 때문입니다.
위의 foo() 함수에 대해, JavaScript 엔진이 본 코드는 다음과 같습니다:
function foo() { var y; // 변수 y의 선언을 상승시킵니다 var x = 'Hello, '; + y; alert(x); y = 'Bob'; {}
JavaScript의 이상한 '특성' 때문에, 함수 내부에서 변수를 정의할 때는 반드시 '함수 내부에서 모든 변수를 먼저 선언' 이 규칙을 준수해야 합니다. 가장 일반적인 방법은 함수 내부에서 사용할 모든 변수를 var로 선언하는 것입니다:
function foo() { var x = 1, // x는1 y = x + 1, // y는2 z, i; // z와 i는 undefined입니다 // 다른 문장: for (i=0; i<100; i++) { ... {} {}
이 js 변수 상승 깊이 이해하는 글은 저가 여러분에게 공유한 모든 내용입니다. 여러분에게 참고가 되길 바라며, 간호教程에 많은 지지를 부탁드립니다.