> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 범위 재검토_기본 지식

JavaScript 범위 재검토_기본 지식

WBOY
풀어 주다: 2016-05-16 16:35:47
원래의
1178명이 탐색했습니다.

황금률 1:

JS에는 블록 수준 범위가 없습니다(자신만의 클로저나 다른 메서드로 구현할 수 있음). 함수 외부의 변수는 함수 내부에서 찾을 수 있지만 함수 내부의 변수는 찾을 수 없습니다. 함수 외부에서 찾을 수 있습니다.

첫 번째 시도:

이게 왜요? ?

var a = 10;
function aaa(){//step-4
	alert(a);//step-5->执行alert,此时只能找到外面的a=10故弹框10
}
function bbb(){//step-2
	var a = 20;
	aaa();//step-3
}
//定义了函数没啥用,调用才是真格的所以这里是step-1
bbb();//step-1
로그인 후 복사

실제로 실수하기 쉽다는 것은 누구나 알고 있는 사실입니다.

두 번째 시도:

이게 왜요? b를 a에 대입할 때 b가 정의되지 않았기 때문에 a는 정의되지 않고 b는 10입니다.

황금률 2:

변수 검색은 근접성 원칙을 기반으로 합니다. var로 정의된 변수를 찾습니다. 변수가 근처에 없으면 외부 레이어를 검색합니다.

보기:

이게 왜요? 여기에는 두 가지 이유가 있는데, 하나는 사전 분석이고, 다른 하나는 주변 검색입니다.

var a=10;
function aaa(){
	alert(a);//undefined,查找a的时候会现在函数内查找,由于预解析的作用,此时的a是undefined,因此永远不会去查找外面的10了
	var a = 20;

	/*预解析
	var a
	alert(a);
	var a = 20;*/

}
aaa();
로그인 후 복사

주의:

그럼 두 번째 점을 확인시켜주는 점입니다. 근접성 원칙이지만 var로 선언한 변수는 근처에서 발견됩니다. 이는 var 없이 선언된 변수가 전역 변수이고 여기서는 a의 값만 수정되기 때문입니다. 그래서 위의 내용은 var의 a가 함수에서 발견되지 않아서 밖에 나가서 찾아보자마자 발견해서 a가 10으로 경고를 받았는데, a 이후에 나온 것은 사실입니다. =20, a는 20입니다. 아직 알림이 실행되지 않았을 뿐입니다~~

어디보자~

다음 예에서는 js의 기능 범위를 추가로 확인합니다.

alert(a) 시점에는 bbb 함수의 a가 실제로 20인데, 이때는 문장 경고(a)에 국한되어 있어 전혀 찾을 수 없기 때문입니다. bbb 함수에서 a를 발견해서 aaa 함수에서 a를 찾지 못해서 밖을 찾아 10을 찾았습니다.

황금률 3:

매개변수 이름이 지역 변수와 같은 경우 우선순위는 동일합니다.

예:

또한: 매개변수를 전달할 때 기본 유형은 값으로 전달되고 참조 유형은 참조로 전달됩니다. (단, 재배치 이후에는 그렇지 않습니다.)

var a = 5;
var b = a;
b +=3;
alert(a);//5

var a = [1,2,3];
var b=a;
b.push(4);
alert(a);//[1,2,3,4];
로그인 후 복사

위 코드에는 문제가 없지만, 다음 코드는 다릅니다.

b가 다시 할당되어 더 이상 a를 가리키지 않기 때문입니다.

또한 매개변수와 변수의 범위는 유사합니다.

이 두 가지를 비교해보세요:

위 매개변수는 기본형으로 값만 전달됩니다. 아래는 참조형입니다. (재할당도 포함)

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿