JS 재 밌 는 JS.

2772 단어
하나
var arr = [];
for (var i = 0; i < 3; i++) {
      arr[i] = function() {
            console.log(i+'__') // 3 3 3
      }
}

arr[0]();
arr[1]();
arr[2]();

 
실행 문맥
for 순환 이 시 작 될 때 i 는 전역 변수 로 서 매번 순환 할 때마다 function 를 arr 에 넣 지만 function 는 순환 이 끝나 지 않 았 습 니 다. 전역 변수 i 의 값 은 3 으로 바 뀌 었 습 니 다. 이때 함수 function 실행 결 과 를 다시 실행 합 니 다.
 
 
둘째,
for (var i = 0; i < 3; i++) {
     setTimeout(function() {
            console.log(i+'...') // 3 3 3
     }, 0)
}

JS 운영 체제 setTimeout 은 비동기 적 인 방법 for 순환 이 시 작 될 때 setTimeout 의 함수 function 은 즉시 실행 되 지 않 고 작업 대기 열 순환 이 끝 날 때 입 니 다. 즉, 주 프로 세 스 가 실 행 될 때 작업 대기 열 방법 이 주 프로 세 스에 들 어가 서 실 행 됩 니 다. 이때 전역 변수 i 의 값 이 3 으로 바 뀌 었 기 때문에 실행 결과 3, 3
 
 
셋째,
window.val = 1;
var obj = {
      val: 2,
      start: function() {
          // console.log(this)
          this.val *= 2;
          val *= 2;
          console.log(val)
          console.log(this.val)
      }
}
obj.start()   // 2 4
var func = obj.start;
func(); // 8 8

this 는 obj. start () 를 실행 할 때 start 함 수 는 obj 속성 이 고 this 는 obj 를 가리 키 며 실행 이 완료 되 었 습 니 다. window. val = 2, obj. val = 4;func () 를 실행 할 때 obj. start 는 일반 함수 로 호출 되 며 this 는 window 를 가리 키 고 있 습 니 다.
 
다음으로 전송:https://www.cnblogs.com/gaosirs/p/10598987.html

좋은 웹페이지 즐겨찾기