폐쇄와 작용역을 다시 깊이 연구하다
function test (arr) {
var temp = []
for (var i =0; i
그러면 다음 결과는 무엇을 출력합니까?
var arr = [1,2,3,4,5]
var arrFn = test(arr)
console.log(arrFn[0])
결과: 0;
그럼 계속 테스트 함수를 다음 두 가지로 바꾸면 어떤 결과가 나올까요?
function test2 (arr) {
var temp = []
for (var i =0; i
function test3 (arr) {
var temp = []
for (var i =0; i
test2는 인터넷에서 비교적 흔히 볼 수 있는 것으로 그 결과 우리가 i를 읽을 때 i는 이미 모두 5로 변했다.test3과test는 두 줄의 코드만 다르지만 결과는 완전히 다르다.
이전에 이해한 바와 같이 우리가 호출할 때 for순환이 이미 실행되었기 때문에 i를 5로 받을 수 있다.그러나 사실 이것은 표상일 뿐이다. 가장 핵심적인 것은 한마디뿐이다.
패키지를 닫으면 값이 아닌 인용을 통해 외부 변수를 가져옵니다.
인용 형식이기 때문에 for가 실행된 후에 i는 5로 바뀌고 인용 형식도 5로 바뀐다.
테스트에 검증할 수 있는 코드를 추가한 것은 다음과 같습니다.
var j = i;
국부적 역할 영역에서 비인용 형식을 성명함으로써 단일 순환 예인용 형식을 저장하면 우리가 원하는 결과를 얻을 수 있습니다.
또한 자체 실행 함수를 통해 매개변수를 전달하여 참조 유형을 비 참조 유형으로 변경하는 방법도 있습니다.
function test4 (arr) {
var temp = []
for (var i =0; i
그 다음은 IIFE로 국부 작용역을 만들 때 더 이상 작용역 외부에서break와continue를 사용해서는 안 된다는 것을 주의해야 한다. 이런 작법은 합법적이지 않다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.