이 문서에서는 JS 타이머 및 종료 문제에 대해 설명합니다.
클로저란 무엇인가요? 그 기능은 무엇인가요?
함수에 다른 함수 내부의 변수에 액세스할 수 있는 권한이 있는 경우 이 내부 함수를 클로저라고 부를 수 있습니다.
함수:
다른 함수 내에서 로컬 변수에 접근할 수 있습니다
항상 이 변수의 값을 메모리에 유지하세요
setTimeout 0의 역할은 무엇인가요
이 코드를 함수의 끝에 배치하는 것과 같습니다. 모든 코드가 실행된 후 즉시 실행되는 코드입니다.
아래 코드는 얼마나 출력되나요? fnArr [i]()가 i를 출력하도록 코드를 수정합니다. 두 가지 이상의 방법을 사용하세요
方法一: var fnArr = []; for (var i = 0; i < 10; i ++) { (function(i){ fnArr[i] = function(){ return i; }; } )(i); } console.log( fnArr[3]() );
方法二: var fnArr = []; for (var i = 0; i < 10; i ++) { (function(){ var a = i; //取消参数,还是运用闭包将i赋值给a fnArr[i] = function(){ return a; }; } )(); } console.log( fnArr[5]() );
클로저를 사용하여 자동차 객체를 캡슐화하세요. 다음과 같은 방법으로 자동차 상태를 얻을 수 있습니다.
var Car = (function(){ var speed = 0 ; function setSpeed(n){ speed = n ; } function getSpeed(){ console.log(speed) ; } function accelerate(){ speed += 10 ; } function decelerate(){ speed -= 10 ; } function getStatus(){ if(speed>0){ console.log('running'); } if(speed===0){ console.log('stop'); } } return { setSpeed:setSpeed, getSpeed:getSpeed, accelerate:accelerate, decelerate:decelerate, getStatus:getStatus, }; })();
Car.setSpeed(30); Car.getSpeed(); //30Car.accelerate(); Car.getSpeed(); //40;Car.decelerate(); Car.decelerate(); Car.getSpeed(); //20Car.getStatus(); // 'running';Car.decelerate(); Car.decelerate(); Car.getStatus(); //'stop';//Car.peed; //error
setInterval의 함수를 시뮬레이션하기 위해 setTimeout을 사용하는 함수를 작성하세요
var a= 0;function intv(){ setTimeout(function (){ console.log(a++); intv(); //在子函数内调用父函数形成循环 },1000); //1秒后执行} intv(); //执行父函数
계산하는 함수를 작성하세요. setTimeout
function num(){ var i =0; var start= Date.now(); //获取当前时间毫秒赋值为start var clock = setTimeout(function(){ //为匿名函数设置定时器立即执行 i++; //i每次+1 if(i === 1000){ //条件为i执行1000次 clearTimeout(clock); //则取消定时器 var end = Date.now(); //获取执行后时间毫秒赋值为end console.log((end-start)/i); //执行后时间-执行前时间再除以次数输出结果 } else{ clock = setTimeout(arguments.callee,0) //不到1000次再次执行此匿名函数 } },0) } num();
다음 코드의 출력 결과는 무엇입니까?
var a = 1; setTimeout(function(){ a = 2; console.log(a); }, 0); //这里使用setTimeout 0,此代码最后执行,所以最后输出2var a ;console.log(a); //输出为1a = 3;console.log(a); //输出为3输出结果为:132
다음 코드의 출력 결과는 무엇입니까?
var flag = true; setTimeout(function(){ flag = false; },0) //此代码放置最后while(flag){} //flag为true,代码在这里陷入无限循环 console.log(flag);
출력 결과는 다음과 같습니다.
empty, fall into an 무한 루프
다음 코드의 출력은 무엇입니까? 지연기 출력 방법: 0, 지연기:1... (클로저를 사용하여 구현됨)
for(var i=0;i<5;i++){ setTimeout(function(){ console.log('delayer:' + i ); }, 0); //此代码放置最后执行,i已变为5,输出delayer:5; console.log(i); //循环输出 0,1,2 ,3 ,4} for(var i=0;i<5;i++){ (function(i){ function set(i){ console.log('delayer:' + i ); } return set(i); })(i); }
결과는 다음과 같습니다.
"delayer:0""delayer:1""delayer:2""delayer:3""delayer:4"
이 문서에서는 JS 타이머 및 클로저 문제에 대해 설명합니다. 자세한 내용은 PHP 중국어 웹사이트를 참조하세요. .
관련 권장 사항:
프런트 엔드 js로 require.js를 모듈화하는 방법
위 내용은 JS 타이머 및 클로저 문제에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!