JS的闭包与定时器

互联网 18-3-8
这次给大家带来JS的闭包与定时器,使用JS的闭包与定时器的注意事项有哪些,下面就是实战案例,一起来看一下。

什么是闭包? 有什么作用闭包就是能够读取其他函数内部变量的函数。作用:1.可以读取函数内部的变量2.让这些变量的值始终保持在内存中。

setTimeout 0 有什么作用js运行是基于单线程的,意味着一段代码执行时,其他代码将进入队列等待,一旦线程有空闲就执行后续代码。如果代码中设定了一个setTimeout,那么浏览器便会在合适的时间,将代码插入任务队列,如果这个时间设为 0,就代表立即插入队列,但并不是立即执行,仍然要等待前面代码执行完毕(其实有个延时,具体是16ms还是4ms取决于浏览器)。所以setTimeout并不能保证执行的时间,是否及时执行取决于 JavaScript 线程是拥挤还是空闲。

代码

var fnArr = [];  for (var i = 0; i < 10; i ++) {  fnArr[i] =  function(){  return i;  };  }  console.log( fnArr3 );  //

代码:方法一:

var fnArr = [];  for (var i = 0; i < 10; i ++) {  fnArr[i] =  (function(){  var index = i;  var fn = function(){  return index  }  return fn  }());  }  console.log( fnArr3 );  //
var fnArr = [];  for (var i = 0; i < 10; i ++) {  (function(n){  fnArr[i] = function(){  return n;  }  })(i)  };  console.log( fnArr3 )

使用闭包封装一个汽车对象,可以通过如下方式获取汽车状态

var Car = //todo;  Car.setSpeed(30);  Car.getSpeed(); //30  Car.accelerate();  Car.getSpeed(); //40;  Car.decelerate();  Car.decelerate();  Car.getSpeed(); //20  Car.getStatus(); // 'running';  Car.decelerate();  Car.decelerate();  Car.getStatus();  //'stop';  //Car.speed;  //error
var Car = (function(){  var speed;  function setSpeed(n){  speed = n  }  function getSpeed(){  return console.log(speed);  }  function accelerate(){  speed +=10  return speed;  }  function decelerate(){  speed -=10  return speed;  }  function getStatus(){  return console.log(speed===0?'stop':'running');  }  return {  setSpeed:setSpeed,  getSpeed:getSpeed,  accelerate:accelerate,  decelerate:decelerate,  getStatus:getStatus,  }  }());  Car.setSpeed(30);  Car.getSpeed(); //30  Car.accelerate();  Car.getSpeed(); //40;  Car.decelerate();  Car.decelerate();  Car.getSpeed(); //20  Car.getStatus(); // 'running';  Car.decelerate();  Car.decelerate();  Car.getStatus();  //'stop';  Car.speed();  //error

写一个函数使用setTimeout模拟setInterval的功能代码:

var i=0;  function intv(){  setTimeout(function(){  console.log(i++);  intv();  },1000);  }  intv();

写一个函数,计算setTimeout最小时间粒度代码:

function getmin(){  var i = 0;  var start = Date.now();  var clock = setTimeout(function(){  i++;  if(i === 1000){  clearTimeout(clock);  var end = Date.now();  console.log((end-start)/i)  }  clock = setTimeout(arguments.callee,0)  },0)  }  getmin()
var a = 1;  setTimeout(function(){  a = 2;  console.log(a);  }, 0);  var a ;  console.log(a);  a = 3;  console.log(a);
var flag = true;  setTimeout(function(){  flag = false;  },0)  while(flag){}  console.log(flag);
for(var i=0;i<5;i++){  setTimeout(function(){  console.log('delayer:' + i );  }, 0);  console.log(i);  }
for(var i=0;i<5;i++){  (function(i){  setTimeout(function(){  console.log('delayer:' + i );  }, 0);  })(i)  console.log(i);  }

烧脑题

function fn(a,b) {  console.log(b);  return {  fn:function(c){  return fn(c,a);  }  };  }  var a = fn(0);  a.fn(1);  a.fn(2);  a.fn(3);  var b = fn(0).fn(1).fn(2).fn(3);  var c = fn(0).fn(1);  c.fn(2);  c.fn(3);

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

简易的CSS3点击响应动画案列

如何使用python来判断图片相似度

以上就是JS的闭包与定时器的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 定时器
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:JS的Dom与事件小结

相关资讯