往期文章目录

浅谈JS中常见的问题(一)
浅谈JS中常见的问题(二)

JS知识总结

  • 往期文章目录
  • 前言
    • 11. 同步和异步的区别
    • 12. JS 判断变量类型的几种方法
    • 13. 如何阻止事件冒泡与默认事件
    • 14. this指向的6种情况
    • 15. JS的异步编程
  • 总结

前言

If at first, the idea is not absurd, then there will be no hope for it.
如果一个想法一开始不荒谬,那么它就毫无希望。
------ 阿尔伯特·爱因斯坦


11. 同步和异步的区别

同步
同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。

异步
将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。

同步和异步本身是相对的
同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。

异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

存在就有其道理 异步虽然好 但是有些问题是要用同步用来解决,比如有些东西我们需要的是拿到返回的数据在进行操作的。这些是异步所无法解决的。


12. JS 判断变量类型的几种方法

(1)最常见的判断方法:typeof

(2)已知对象类型: instanceof

(3)对象原型链判断方法: prototype 通用但很繁琐

(4)根据对象的构造器constructor进行判断

(5)严格运算符: ===


13. 如何阻止事件冒泡与默认事件

1、event.stopPropagation()方法
event.stopPropagation()方法阻止事件冒泡到父元素,阻止任何父事件处理程序被执行。不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开。
提示:请使用 event.isPropagationStopped()方法来检查指定的事件上是否调用了该方法。

2、event.preventDefault()方法
取消事件的默认动作。该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。

例如:
form表单如果 type 属性是 “submit”,在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。a元素中href连接,如果调用此方法是,连接不会被打开。

注意:
如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。
该方法会发生冒泡,冒泡会传递到上一层的父元素。

3、return false
这个方法比较暴力,它会同时阻止事件冒泡和默认事件,写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;

可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

细分的话
IE浏览器:
window.event.cancelBubble = true;//停止冒泡
window.event.returnValue = false;//阻止事件的默认行为

Firefox浏览器:
event.preventDefault();// 取消事件的默认行为
event.stopPropagation(); // 阻止事件的传播

参考内容:文章1,文章2


14. this指向的6种情况

全局中的函数和全局变量可以看作是window的方法和属性所以全局函数中的this指向window;
方法中的this指向该方法所指的对象;
this指向函数运行时所属的对象;
this不指函数本身,也不指函数所对的作用域,指向调用此函数的对象。

this指向分为六种情况
1)全局函数中的this,在全局环境下调用的时候指向window;
注意:如果全局函数内部是严格模式,则在全局环境下不指向window,指向undefined

2)函数被赋值给某个事件时,指向对象所属的对象;

3)this在对象方法中使用时,指向的是方法所属的对象;

4)在闭包中this指向window;

5)在构造函数中以及构造函数的原型对象中的this,都指向构造函数的实例对象;
var arr=new Array( ) Array是构造函数 arr实例对象

6)箭头函数中的this指向箭头函数所在(定义)的执行环境。


15. JS的异步编程

因为js是单线程的。浏览器遇到etTimeout 和 setInterval会先执行完当前的代码块,在此之前会把定时器推入浏览器的待执行时间队列里面,等到浏览器执行完当前代码之后会看下事件队列里有没有任务,有的话才执行定时器里的代码。

常用的方式:setTimeout setIntervel ajax Promise asyc/await

宏任务(marcotask)微任务(microtask) 的执行顺序
先执行宏任务,然后在执行微任务;
JS中的宏任务:setTimeout setIntervel ajax
JS中的微任务:Promise.then Promise.catch await(可以理解成Promise.then)

JS的执行顺序是先同步 再异步;同步执行完成之前 异步不会执行

EventLoop 事件循环
EventQueue 事件队列


总结

本文简单总结了一下有关JS的部分知识点,希望能对你有所帮助。

浅谈JS中常见的问题(三)相关推荐

  1. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

  2. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  3. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

  4. 浅谈JS中的escape,URLEncode与encodeURIComponent

    在JS中,escape,URLEncode与encodeURIComponent都是编码方法,一般用于对URL进行编码 为什么要使用编码方法 网络标准RFC 1738做了硬性规定: "... ...

  5. 浅谈js中的this

    js中,this自动引用正在调用的当前方法 . 前的对象.简而言之,this就是指向当前对象.举例说明: 1. obj.fun()中如果出现this.那么,this就是指向obj 2. new Fun ...

  6. 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升

    1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...

  7. 浅谈js中的异步编程

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/0412/3110968788347.html JS异步编程模型 在理解js异步编程时, 我们先再心中想一 ...

  8. 浅谈C#中常见的委托Func,Action,Predicate(转)

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  9. java中parseint函数_浅谈 js中parseInt函数的解析

    首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说pa ...

最新文章

  1. Deadline来了,如何按时结题?
  2. linux日常管理3
  3. netapp学习(五)---创建volume
  4. 让远程协助在局域网里无处不在
  5. android获取网络图片
  6. 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯
  7. P5170 【模板】类欧几里得算法(类欧)
  8. hdu 4946 凸包注意重点
  9. powerdesigner2
  10. 个人信息保护呼吁“基本法”
  11. 2020 最烂密码 TOP 200 大曝光,霸榜的仍旧是 123456!
  12. GoAhead服务器编程
  13. java 本地文件上传到服务器,java本地文件上传到远程服务器
  14. 如何在论文后面插参考文献
  15. 计算机学院早操规定,宜宾学院早操管理规定
  16. css 侧栏跟随_如何实现博客的侧栏跟随(滚动条)效果
  17. 游戏图形测试软件,今日共有3款免费测试网络游戏(组图)
  18. html5 鼠标动画效果,7 个让人惊叹的 HTML5 鼠标动画
  19. 如何做好项目的需求与业务调研
  20. 问题 A: 电路维修

热门文章

  1. 【excel】多表汇总查询实现
  2. 《疯狂Java讲义》学习笔记 第六章 面向对象(下续)
  3. MySQL 索引知识点总结
  4. Linux学习之用户、组和权限管理
  5. 前端笔记知识点整合之JavaScript(四)关于函数、作用域、闭包那点事
  6. win7下的众多BEX错误问题
  7. 地图 显示 动态轨迹_打造物流行业专属地图,你期待的公测版已上线
  8. Oracle单表内连接查询
  9. python简单病毒代码
  10. 如何经营好30岁到35岁?这是我看过最好的职业建议文章