변수가 사라지는 이유 : 범위 퍼즐에 대한 실용 가이드
범위 규칙으로 인해 변수가 사라집니다. 선언 된 곳에서 액세스 할 수있는 위치를 결정합니다. 2. 우발적 인 글로벌 생성은 var/let/const를 생략 할 때 발생하는 반면, 엄격한 모드는 오류를 던지면이를 방지합니다. 3. 블록 스코프 혼란이 발생합니다. var는 블록 스코핑 된 Let and Const와는 달리 함수 스코핑되기 때문에 발생합니다. 4. 기능 범위 트랩에는 가변적 인 그림자와 중첩 된 기능 변수에 대한 부적절한 액세스가 포함됩니다. 5. 비동기 문제는 var의 루프가 클로저가 let 또는 클로저를 사용하여 고정 된 동일한 변수를 공유 할 때 발생합니다. 항상 LET 또는 Const로 변수를 선언하고 엄격한 모드를 사용하며 Eslint와 같은 도구를 활용하여 범위 관련 오류를 일찍 포착하십시오.
몇 줄의 코드를 작성하고 변수를 설정 한 다음 갑자기“정의되지 않은”,“찾을 수 없음”또는 조용히 무시됩니다. 실망 스럽습니까? 이것은 일반적으로 당신의 언어로 된 버그가 아닙니다. 직장에서의 범위입니다. 변수가 존재하고 액세스 할 수 있는 범위를 이해하는 것이 이러한 사라지는 행위를 피하는 핵심입니다.

변수가 사라지는 이유와 필요한 곳에 변수를 유지하는 방법을 세분화합시다.
범위 가란 무엇이며 왜 중요한가요?
범위는 코드의 다른 부분에서 변수의 가시성을 정의합니다. 집안의 방처럼 생각하십시오. 부엌에서 선언 된 가변은 공유 공간에 있지 않으면 침실에서 볼 수 없습니다.

세 가지 주요 유형이 있습니다.
- 글로벌 범위 : 변수는 기능이나 블록 외부에서 선언합니다. 그들은 어디에서나 접근 할 수 있습니다.
- 함수 (로컬) 범위 : 함수 내부의 변수. 그 기능 만 볼 수 있습니다.
- 블록 스코프 (예 : JavaScript의
let
andconst
) : 변수는if
,for
또는 plain{}
와 같은{}
블록 내에 만 존재합니다.
범위를 벗어난 변수에 액세스하려고 할 때 숨겨진 것이 아니라 존재하지 않을 수도 있습니다.

일반적인 방법은 변수가 "사라집니다"
1. 우발적 인 글로벌 창조 (또는 회피)
JavaScript에서 var
, let
또는 const
없는 변수를 사용하여 로컬로 유지하려는 경우에도 전역을 생성합니다.
함수 badexample () { x = "지금은 전 세계입니다!"; } Badexample (); Console.log (x); // "지금은 전 세계입니다!" - 아마도 당신이 원하는 것이 아닐 수도 있습니다
그러나 사례를 뒤집습니다 : var
/ 엄격한 모드를 잊어 let
( 'use strict'
) 오류가 발생합니다. 따라서 변수는 사라지지 않고 스크립트가 충돌합니다.
✅ 수정 : 항상 let
또는 const
로 변수를 선언합니다. 엄격한 모드를 사용하여 일찍 실수를 잡으십시오.
2. 블록 범위 혼동
많은 사람들이 var
가정하고 동일하게 행동 let
합니다. 그들은하지 않습니다.
if (true) { var a = "어디서나 보이도"; B = "이 블록에서만"하자; } Console.log (a); // 작품 : "모든 곳에서 보이기" Console.log (b); // 오류 : B는 정의되지 않았습니다
var
블록 스코프가 아닌 기능 스코핑입니다. 따라서 if
블록에서 a
됩니다. 그러나 b
( let
)는 제한되어 있습니다.
✅ 수정 : 블록 레벨 컨트롤에 let
및 const
사용하십시오. var
기능 경계 만 존중한다는 것을 알고 있습니다.
3. 기능 범위 트랩
함수 내부 변수는 기본적으로 로컬입니다. 그러나 중첩 기능은 혼란을 야기 할 수 있습니다.
함수 외부 () { 비밀 = "숨겨진"; 함수 내부 () { Console.log (Secret); // 작동 : 내부는 외부 변수를 볼 수 있습니다 } 안의(); } 밖의(); Console.log (Secret); // 오류 : 여기에서 액세스 할 수 없습니다
이것은 어휘 범위 입니다 - 인더 함수는 외부 변수에 액세스 할 수 있지만 그 반대는 아닙니다.
그러나 내부 기능을 호출하는 것을 잊어 버리면 어떨까요? 아니면 변수를 다시 고정합니까?
함수 외부 () { x = 1을하자; 함수 내부 () { x = 2로하자; //이 그림자는 외부 x를냅니다 Console.log (x); // 2 } 안의(); Console.log (x); // 1 - 원래 변경되지 않았습니다 }
✅ 수정 : 가변적 인 그림자에주의하십시오. 혼란을 피하기 위해 변수 이름을 명확하게 지정합니다.
4. 비동기 코드 및 폐쇄 문제
다음은 클래식입니다 : 콜백이있는 루프의 변수.
for (var i = 0; i <3; i) { settimeout (() => console.log (i), 100); } // 출력 : 3, 3, 3 - 0, 1, 2가 아닙니다!
왜? var
블록 범위가없고 setTimeout
실행되기 때문에 루프가 완료되었습니다. i
3이다.
그러나 var
변경 let
:
for (i = 0; i <3; i) { settimeout (() => console.log (i), 100); } // 출력 : 0, 1, 2 - 작동합니다!
각 반복에 대한 새로운 바인딩을 생성 let
.
✅ 수정 : 비동기 콜백이있는 let
를 사용하십시오. 또는 var
.
범위 문제를 디버깅하는 방법
변수가 사라지는 것처럼 보일 때 :
- 선언 된 위치를 확인하십시오 - 함수, 블록 또는 전 세계에 있습니까?
- 오류 메시지를보십시오 - "정의되지 않은"것은 그것이 존재하지 않았다는 것을 의미합니다. "정의되지 않은"이란 선언되었지만 할당되지 않은 것을 의미합니다.
-
console.log
또는 Debugger를 사용하십시오 - 단계를 통과하여 어디에서 나타나거나 사라지는 지 확인하십시오. - 글로벌 오염을 피하십시오 - 너무 많은 글로벌이 추적을 더 어렵게 만듭니다.
또한 고려 :
- 기본적으로
const
사용하려면 필요할let
- 기능을 작게 유지하여 범위를 따라 가기가 더 쉽습니다.
- 엄격한 모드를 활성화하고 eslint와 같은 라이터를 사용하여 선언되지 않은 변수를 포착합니다.
결론
변수는 실제로 사라지지 않습니다. 그들은 결코 시작할 수 없었습니다. 규칙은 임의적이지 않습니다. 그들은 당신의 코드를 명명 충돌과 의도하지 않은 행동으로부터 보호합니다.
언어의 범위 규칙을 이해하고, 변수를 올바르게 선언하고, 어디서 사용하는지에주의를 기울이십시오.
기본적으로 : 올바른 방에서 사용하십시오 .
위 내용은 변수가 사라지는 이유 : 범위 퍼즐에 대한 실용 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP의 초 고 유적 변수는 항상 요청 데이터를 처리하고 상태를 관리하며 서버 정보를 얻는 데 사용되는 내장 배열을 사용할 수 있습니다. 1. $ _get을 사용할 때 URL 매개 변수는 유형으로 변환하고 확인해야합니다. 2. $ _post를 통해 양식 데이터를 수신 할 때 필터링을 filter_input ()로 수행해야합니다. 3. 보안 취약점을 방지하기 위해 $ _request를 사용하지 마십시오. 4. $ _session Session_Start ()을 호출하고 로그인하여 세션 ID를 재설정해야합니다. 5. $ _cookie를 설정할 때 보안, httponly 및 samesite 속성을 활성화하십시오. 6. $ _server의 정보는 완전히 신뢰할 수 없으며 보안 검증에 사용될 수 없습니다. 7. $ _ Env

phpresolvesvariablesinaspecificorder : 1. localscopeitinthecurrentfunction, 2.functionparameters, 3. variablesimportedviauseinclosures, 4.globalscopeonyifexplicitlydeclaredwithglobaloraccessed globals, 5.sperglobals와 같은 $ _sphichareal

Thedifferencebetweenlocalandglobalscopeliesinwherevariablesaredeclaredandaccessible:globalvariablesaredefinedoutsidefunctionsandaccessibleeverywhere,whilelocalvariablesaredeclaredinsidefunctionsandonlyaccessiblewithinthem.1.Globalscopeallowsbroadacce

PHP에서 익명 함수로 외부 변수를 사용하려면 사용 키워드를 통해 명시 적으로 가져와야합니다. 1. 사용은 폐쇄의 어휘 범위에 외부 변수를 도입하는 데 사용됩니다. 2. 기본적으로 값별로 변수를 통과하고 & $ var 구문으로 참조하여 전달하십시오. 3. 여러 변수를 쉼표로 분리 할 수 있습니다. 4. 변수의 값은 폐쇄가 정의 될 때, 실행 될 때가 아니라 캡처됩니다. 5. 루프의 각 반복은 가변 값이 올바르게 캡처되도록 독립적 인 폐쇄 사본을 생성합니다. 따라서 사용은 클로저와 외부 환경 간의 상호 작용을 달성하는 핵심 메커니즘으로 코드를보다 유연하고 제어 가능합니다.

TheglobalkeywordinphPallowsfunctionStoaccceSvariblesvariblesfloglobalscope, butithoudsparlyingsificinglificantantpladbacks.1) ItenablesquickaccesstoconfigurationValuesinSmallorlegacyscripts.2) ItfitsproceduralcodebasseSwhereDep

thetwomaintoolsforaccessingglobalvariablesinphparetheglobalkeyword and globalssuperglobalarray; 1) theglobalkeywordcreatesErencetoAglobalvariableInsidefunction, directaccessandmodification, andifthevariableisundefined, Itinitifined

수율을 사용한 기능은 발전기가되고, 호출되면 즉시 실행되는 대신 발전기 개체를 반환합니다. 2. 수율 일시 정지 중에 발전기의 국부 변수는 파괴되지 않지만 발전기가 소진되거나 닫힐 때까지 발전기 프레임으로 계속 존재합니다. 3. 확장 된 가변 수명주기는 특히 큰 물체를 참조 할 때 메모리 사용량이 증가 할 수 있습니다. 4. 폐쇄와 결합 할 때, LEGB 규칙은 여전히 준수하지만, 루핑 변수의 늦은 바인딩 문제는 즉시 바인딩 (기본 매개 변수 값)에 의해 해결되어야합니다. 5. 생성기는 변수의 생존 시간을 연장하여 메모리와 동작에 영향을 미치지 만 어휘 스코프 규칙을 변경하지는 않습니다.
