첫 번째 황금률 :
JS에는 블록 레벨 범위가 없습니다 (폐쇄 또는 기타 방법으로 직접 구현할 수 있음) 기능 수준 범위 만 있습니다. 함수 외부 변수는 함수에서 찾을 수 있지만 함수 내부의 변수는 외부에서 찾을 수 없습니다.
첫 번째 :
이게 왜? ?
var a = 10; function aaa () {// step-4alert (a); // step-5-> 경고 실행 경고,이 시점에서 팝업 박스 10} 함수 bbb () {// step-2var a = 20;사실, 모든 사람은 원칙을 이해하고, 쉬운 실수의 문제 일 뿐이며 모든 것이 바뀔 것입니다.
2 차 :
이게 왜? A가 할당되면 B가 할당되기 때문에 B는 아직 정의되지 않으므로 A는 정의되지 않았으며 B는 정의되지 않고 B는 10입니다.
황금 코드 제 2 조 :
변수 검색은 근접의 원리입니다. VAR에 의해 정의 된 변수를 찾으려면 근처에 발견되지 않으면 외부 층을 검색하십시오.
바라보다:
이게 왜? 여기에는 두 가지 이유가 있습니다. 하나는 분석 전이고 다른 하나는 근처에서 검색하고 있습니다.
var a = 10; function aaa () {alert (a); // 정의되지 않았습니다. A를 검색 할 때는 기능을 찾아 볼 것입니다. 사전 준비의 효과로 인해 현재 A는 정의되지 않으므로 외부 10 var a = 20;/*전파 var aalert (a); var a = 20;*/} aaa ()를 찾지 못할 것입니다.주목:
두 번째 항목을 확인해 봅시다. 근접의 원칙이지만 근처에 var가 선언 한 변수를 찾는 것입니다. VAR에 의해 선언 된 변수가 전역이기 때문입니다. 여기서 A의 값은 방금 수정되었습니다. 위의 것은 VAR의 A가 함수에서 발견되지 않기 때문에 외부로 나가서 검색하자마자 발견했습니다. 그러나 진실은 a = 20 이후에 A는 실제로 20이지만 경고 할 때 아직 실행되지 않았다는 것입니다 ~~
~ 참조
다음 예제는 JS의 함수 범위를 추가로 확인합니다.
경고 (A)가 BBB 함수의 A가 실제로 20이지만 현재 문장 경보 (a)에 국한되기 때문입니다. Alert (a)는 BBB 함수에서 A를 찾을 수 없으므로 AAA 기능에서 A를 찾을 수 없으므로 외부로 나가서 10을 찾습니다.
황금 코드 제 3 조 :
매개 변수가 로컬 변수와 복제되면 우선 순위는 동일합니다.
예:
또한 : 매개 변수를 전달할 때 기본 유형은 값을 전달하고 참조 유형은 참조를 전달합니다. (그러나 재 할당 후에는 그렇지 않습니다)
var a = 5; var b = a; b += 3; 경고 (a); // 5var a = [1,2,3]; var b = a; b.push (4); 경고 (a); // [1,2,3,4];
위의 코드에는 문제가 없지만 다음은 다릅니다.
B는 재 할당되므로 A를 가리키지 않습니다.
또한 매개 변수 및 변수의 범위는 비슷합니다.
이 두 가지 비교 :
위의 매개 변수는 기본 유형이며 값 만 전달됩니다. 다음은 참조 유형입니다. (또한 재 할당의 경우도 포함)