>  기사  >  웹 프론트엔드  >  자세한 예에서는 var를 사용하여 변수를 선언할 때의 단점을 설명합니다.

자세한 예에서는 var를 사용하여 변수를 선언할 때의 단점을 설명합니다.

WBOY
WBOY앞으로
2022-08-09 16:01:261709검색

이 글에서는 javascript에 대한 관련 지식을 제공합니다. 주로 var를 사용하여 변수를 선언하는 것과 관련된 문제를 소개합니다. 모두를 돕습니다.

자세한 예에서는 var를 사용하여 변수를 선언할 때의 단점을 설명합니다.

【관련 권장사항: javascript 동영상 튜토리얼, 웹 프론트엔드

변수 선언 문제

  • var를 사용하여 변수를 선언합니다(반복되는 변수 선언 허용: 데이터 덮어쓰기 발생)

변수 승격

  • 이상한 데이터 액세스
  • 클로저 문제

  • 함수에 있는 변수가 최상위로 승격됩니다.
  • 전역 범위의 변수도 최상위로 승격됩니다.

Var 선언 JavaScript에서는 변수

  • 의 결함을 선언하지 않고 사용할 수 있습니다(var로 선언된 변수는 미리 컴파일되거나 변수 힌트가 제공됩니다). 이는 비논리적입니다.

  • 같은 변수는 여러 번 선언할 수 있지만 엄밀히 말하면 변수를 한 번 선언한 후에는 나중에 선언하는 것이 아니라 수정만 가능합니다. 논리적이지도 않습니다.

  • for 루프의 루프 매개변수는 기본 제어 루프의 원래 역할을 넘어 루프 외부(for 루프가 오염됨)에서 사용될 수 있습니다. 논리적이지 않습니다.

  • 블록 수준 범위가 없습니다.

예를 살펴보겠습니다

//首先判断生成一个随机数当随机数小于0.5时声明a赋值为‘abc’
//然后输出a

if (Math.random() < 0.5){
	var a = 'abc';
	console.log(a);
}
//如果不是那么输出a
else {
	console.log(a)
}

console.log(a);

여기에 매우 심각한 문제가 있습니다.

먼저 판단하여 난수를 생성합니다. , a를 선언하고 a

를 출력합니다. 그러면 a

가 0.5 이상이면 a

도 출력됩니다. 그러면 이 a는 실제로 존재하지 않습니다. 변수 승격 문제로 인해 전역 범위에는 a가 있습니다. 읽을 수 있으면 변수 승격으로 인해 전역 범위가 영향을 받습니다.

보통은 별 문제 없을 것 같지만, 이 코드를 다른 언어에 넣어서 비슷한 코드를 작성하면 분명 오류가 발생하기도 하고, 이 문제로 인해 작업이 어려워지기도 합니다. 어느 정도 대규모 응용 프로그램의 경우.

클로저 문제를 다시 살펴보겠습니다.

//选中div
var div = document.getElementByTd('div');
//我这里创建10个按钮并添加进代码里

for (var i = 1; 1 < 10; i ++){
	var btn = document.createElement('button');
	btn.innerHTML = '按钮' + i;
	div.appendChild(btn);
	//添加点击事件点击按钮时输出对应的i
	btn.onclick = function () {
		console.log(i);
	}
}
//但是当点击输出时所有的按钮都为11
//原因是当在for声明变量i时遇到了变量提升就导致了来来回回更改的就只有这一个i
//而当我们点击时for早已循环完所以循环完成时i = 11;就输出也是11了
//
//一般我们的解决办法是将点击事件上写一个立即执行函数执行完删除方可正常运行

전역 변수가 전역 객체에 마운트됨: 전역 객체 멤버 오염 문제

var abc = "123"
console.log(abc);
//可以正常输出对吧,这就导致了一个问题
//我可以将abc挂载到window上如果说我要写很多的代码那就会导致全局变量污染

//然后我给console赋值
var console = "abc";
console.log(console);
//然后再输出console会报错
//因为我对window的console进行了覆盖所以会报错

원래 JS Place에서 직면한 다양한 문제와 불편함 【관련 추천: javascript 비디오 튜토리얼,

웹 프론트엔드🎜】🎜

위 내용은 자세한 예에서는 var를 사용하여 변수를 선언할 때의 단점을 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제