연습 문제.
11794 단어 매일 하나의 지식 포인트풍부한 내 프런트 엔드
var data = [];
for(var i = 0; i < 3; i ++) {
data[i] = (function(i) {
return function() {
console.log(i);
}
}(i))
}
data[0]();
data[1]();
data[2]();
: 3
function fun(n, o) {
console.log(o);
return {
fun : function(m) {
return fun(m, n);
}
};
}
var a = fun(0);// fun undefined, a, n=0
a.fun(1);// a fun, fun, ,m = 1, fun(1,0)
// fun(1,0), 0,
//console.log(typeof(a.fun(1)));//object
a.fun(2);// fun(2,0) //0
a.fun(3);// fun(3,0) //0
var b = fun(0).fun(1).fun(2).fun(3)//fun(0) fun(0,0),fun(1) fun(1 , 0), 0, n=1,fun(2) fun(2,1), 1, n=2,fun(3) fun(3,2), 2, n=3;
var c = fun(0).fun(1); //undefined 0
c.fun(2); //1
c.fun(3);//1
function fn1() {
for(var i = 0; i < 4; i ++) {
var tc=setTimeout(
function(i){
console.log(i);
console.log(tc);
clearTimeout(tc)
}, 10 ,i);
}
}
fn1();
10ms function(i),i 。
tc 4 。
function(i) , ,
이 문제는 주로 비동기와 클로즈업 문제의 비동기를 고찰했다. js는 단일 라인이고 한 번에 하나의 명령만 실행할 수 있다.js가 실행될 때 주 작업 대기열을 생성합니다. 대기열에서 순서대로 실행됩니다. setTimeout이 실행될 때 setTimeout은 안에 있는 함수를 비동기 대기열에 저장합니다. setTimeout이 실행된 후에 js는 이벤트loop 이벤트를 통해 순환합니다. 비동기 대기열에 작업이 기다리는 것을 발견하고 팀 i열에 추가하여 실행을 시작합니다.그래서 tc가 마지막으로 보류한 것은 마지막 타이머를 만들고 되돌아오는 값(tc=4)을 만든 후에야 setTimeout의 함수function(i) 클립을 실행하기 시작하는 것이다. setTimeout의 실행이 끝났음에도 불구하고 안에 클립이 생겼고 다시 function을 실행할 때 사용하는 값은 타이머가 실행될 때의 역할 체인에 대응하고 tc가 클립에 저장되지 않았기 때문에 처음cleartimeout(tc)일 때마지막 타이머를 지우고 마지막 set Timeout을 실행하지 않았기 때문에 출력 결과는 0 1 2
function fn2() {
for(var i = 0; i < 4 ;i ++){
var tc=setInterval(function(i, tc){
console.log(i);
clearInterval(tc)
},10,i,tc);
}
}
10Ms, function(i,tc),tc ( )
undefined,i 1
, 10ms 3。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[매일 하나의 지식 포인트] 21-Java 언어-MultiCatchJava7의 새로운 기능입니다.이전의 코드에서 모든catch는 하나의 이상만 쓸 수 있었다. 일부 디자인이 심사숙고하지 않은 코드는 너무 많은 이상을 던져서 catch 부분이try의 코드보다 길 수 있고 catch의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.