美文网首页
js难点理解

js难点理解

作者: 最好的自己_3d47 | 来源:发表于2019-09-26 15:17 被阅读0次

闭包

含义:有权访问另一个函数作用域的变量的函数
创建方式:在一个函数内部创建另一个函数

function createFunctions(){
    var result=[];
    for(var i=0;i<10;i++){
      result[i]=function(){
          return i;
       }
   }
  return result;
}
console.log(createFunctions()[1]())
//表面上看,每个函数都应该返回自己的索引值,即位置0对应0,位置1对应位置1,但实际上每个函数都返回10。
//因为每个函数作用域链中都保存着createFunctions()函数的活动对象,所以引用的都是同一个变量i;
//或者换个说法,result[i]=function(){}中的i使用的是外部的i,是个全局变量
`解决方法`
function createFunctions(){
    var result=[];
    for(var i=0;i<10;i++){
      result[i]=function(num){
          return function(){
            return num;
          }
       }(i);     //将i作为参数传入,num就是接收的变量
   }
  return result;
}

this对象

含义:运行时基于函数的执行环境绑定的:在全局函数中this相当于window
注意点:匿名函数的执行环境具有全局性,因此this对象指向window


      var name='小鱼';
       var obj={
               name:'小二',
               getName:function(){
                     return this.name;
               }
       }

console.log(obj.getName()())    //得到的小鱼,因为是匿名函数,这里的this指向window

定时器

1.高级定时器

javascript是运行于单线程环境中的,而定时器只是表示在多长时间后加入队列。出来主Javascript执行进程外,还有一个需要在进程下一次空闲时执行的代码队列

例子:
btn.onclick=function(){
    setTimeout(function(){
          console.log(111);
    },250)
}     //点击按钮后,经过250ms后,指定的代码添加到队列中等待执行。队列中的所有代码都要等到javascript进程空闲后才能执行,所以有一些页面倒计时一般不放在前端进行。

2.重复的定时器

setInterval():多次定时。
重复定时器存在的两个问题:1.某些间隔会被跳过;2.多个定时器的代码执行之间的间隔会比预期的小。
例:每隔200ms添加到队列,第一个205ms,第二个405ms处,第三个605ms,加入605ms时,第一个定时器的代码仍在运行,同时队列中已经添加了第二个定时器代码的实例,所以在605ms处,这个时间点的定时器代码不会被加入队列中,而当第一个定时器的代码结束,第二个定时器代码会立即执行,所以定时器代码时间间隔比较小.

解决方法:
function sendTime(){
    var i=0;
    setTimeout(function(){
      i++;
      console.log(i);
      setTimeout(arguments.callee,1000);   //来获取对当前函数的引用,但是在严格模式下会报错,将arguments.callee改为函数sendTime()
    },1000)
}

这样做的好处是在前一个定时器代码执行完之前,不会相对列加入新的代码,确保了不会有任何的缺失间隔,而且保证在下一次定时器代码执行之前,至少要等待指定的间隔

3.如何判断一个对象为空

var obj={};
console.log(JSON.stringify(obj)=='{}');
console.log(Object.keys(obj).length==0)

相关文章

  • js难点理解

    闭包 含义:有权访问另一个函数作用域的变量的函数创建方式:在一个函数内部创建另一个函数 this对象 含义:运行时...

  • JS重难点梳理

    重读JS高程,系统梳理下JS重难点JS重难点梳理之事件

  • js难点(好)

    https://www.jianshu.com/p/08376358e7bc

  • 深刻理解JavaScript:作用域的基本概念

    前言 最近我打算写一系列文章来介绍JS中的一些难点,希望能帮助其他不太理解的人从初学者到达深刻理解的地步。文章内容...

  • 精彩文章推荐

    深入了解JS重点难点讲的蛮精彩,由浅入深

  • 温故知新(一)图解原型链继承

    1. 准备 1.1 学习契机: 近日学习如何写JS插件,难点一是功能,二是语法。在实践中发现对于原型链的理解有些遗...

  • js语法难点

    javascript语法难点问题 Javascript的变量javascript语言和java语言一样变量是分为两...

  • JS 堆栈Object详解

    Js——万物皆对象??! 对于初学Js的码农来说,Js的对象是令大家困惑的一个难点,而面向对象的思想却是掌握Js编...

  • js中的继承(es5)

    这个问题事关js里面的很多难点的问题,诸如prototype,call和apply等,也是js面向对象的问题,值得...

  • js引擎的执行机制

    js引擎的执行机制 JS的Event Loop是JS的执行机制,理解JS的执行,必须理解Event Loop JS...

网友评论

      本文标题:js难点理解

      本文链接:https://www.haomeiwen.com/subject/nmijuctx.html