javascript 선언 미리 발생 한 코드 규범
4363 단어 JavaScript
JavaScript 의 함수 역할 영역 은 함수 내 에서 설명 하 는 모든 변 수 를 함수 내 에서 항상 볼 수 있 습 니 다.그래서 변 수 는 성명 하기 전에 사용 할 수 있 습 니 다.
function test() {
alert(ss);
var ss = 123;
}
test();
이 코드 의 실행 결 과 는 undefined 로 예상 치 못 한 오류 가 발생 하지 않 았 습 니 다.
이 유 는 javascript 함수 의 모든 변수의 성명 이 함수 의 맨 위로 앞 당 겨 졌 기 때 문 입 니 다. 사실 이 코드 는 상당 합 니 다.
function test() {
var ss;
alert(ss);
ss = 123;
}
test();
예 를 하나 더 보다.
var ss="123";
function test()
{
alert(ss);
//....
var ss="321";
}
이 함수 test 의 실행 결 과 를 추측 할 수 있 습 니 다. 성명 을 이해 하면 이 결 과 는 undefined 입 니 다. 왜냐하면 실행 결 과 는 등가 이기 때 문 입 니 다.
var ss="123";
function test()
{
var ss;
alert(ss);
ss="321";
}
성명 은 국부 변수 ss 의 값 이 전역 변수 ss 의 값 을 덮어 쓰기 때문에 alert 를 실행 할 때 ss 의 값 은 undefined 입 니 다.
주의: 미리 설명 하 는 것 은 미리 할당 되 지 않 습 니 다. 상기 빨간색 코드 의 위치 가 바 뀌 지 않 았 음 을 주의 하 십시오.
이 로 인해 발생 하 는 코드 규범:
함수 내부 에서 함수 의 변 수 를 함수 체 의 상단 에 두 는 것 이 좋 습 니 다. 이러한 좋 은 습관 을 들 이면 변수 성명 이 앞 당 겨 져 서 발생 하 는 오 류 를 피 할 수 있 습 니 다.코드 보 세 요.
function scroll() {
var em,
i = 0,
arr1 = document.getElementsByTagName('span'),
arr2 = document.getElementsByTagName('label'),
text = [],
txt;
for (; i < arr1.length; i++) {
txt = arr1[i].innerText;
text.push(txt);
}
i = 0;
for (; i < arr2.length; i++) {
txt = arr2[i].innerText;
text.push(txt);
}
return text;
}
상기 코드 에서 변수의 성명 이 모두 함수 상단 에 놓 여 있 는 것 을 볼 수 있 습 니 다. 이 방법 을 추천 합 니 다.
예제 에서 for 순환 의 변수 성명 도 추출 되 었 습 니 다. 이렇게 여러 순환 은 같은 변 수 를 사용 할 수 있 습 니 다.왜 그 랬 을 까?코드 를 보십시오:
function scroll()
{
for(var i=0;i<10;i++);
for(var j=0;j<10;j++);
alert(i);
alert(j);
}
세심 한 사람 은 상술 한 alert 의 결과 가 모두 10 이라는 것 을 짐작 할 수 있 을 것 이다.이것 은 모두 JavaScript 에서 블록 급 역할 영역 이 없 기 때 문 입 니 다.
한편, i, j 변 수 는 모두 쓰레기 회수 체 제 를 통 해 회수 되 지 않 았 다. 함수 가 이전 층 의 실행 환경 으로 돌아 가 야 i, j 를 방출 할 수 있다.분명히 비교 해 보면 같은 변수 로 여러 순환 을 실현 하 는 것 이 두 변수 보다 낫다.
실제 개발 과정 에서 변수의 방출, 역할 영역 등 을 자주 주의 하고 세 심하게 고려 하면 코드 의 집행 효율 과 메모리 의 사용률 을 향상 시 키 는 데 도움 이 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.