在前端学习道路上,容易混淆的几个知识点!

Jacquelyn38
• 阅读 1310

async与defer

async: 可选属性。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效(写在html文件中的js代码,添加此属性无效,仍按代码加载顺序执行)。

defer: 可选属性。标识脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。

在前端学习道路上,容易混淆的几个知识点!

script标签属性async与defer之间的区别:蓝色线代表网络读取,红色线代表执行时间,这俩都是针对脚本的;绿色线代表 HTML 解析。

伪元素与伪类

伪元素: 是一个附加至选择器末的关键词,允许你对被选择元素的特定部分修改样式。例如::before,::after,::first-letter等。它是创造出一个并不存在的“元素”内容,并附加样式。

伪类: 没有创造元素内容,只是选中某些状态下的已有元素,并附加样式。比如:first-child,:active,:focus等等。

防抖与节流

函数防抖: 当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

function debounce(handle, delay) {  
    var timer = null;  
    return function () {  
        var _self = this,  
            _args = arguments;  
        clearTimeout(timer);  
        timer = setTimeout(function () {  
            handle.apply(_self, _args)  
        }, delay)  
    }  
}  

函数节流: 当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

function throttle(handler, wait) {  
    var lastTime = 0;  
    return function (e) {  
        var nowTime = new Date().getTime();  
        if (nowTime - lastTime > wait) {  
            handler.apply(this, arguments);  
            lastTime = nowTime;  
        }  
    }  
}  

call、apply、bind

为了改变方法内部this的指向,第一个参数为this的指向,其余参数是一个普通的参数列表。

call: 第一个参数为this的指向,其余参数就是一个普通的参数列表。

apply: 第一个参数为this的指向,其余参数接受一个数组类型的参数。

bind: 第一个参数为this的指向,其余参数就是一个普通的参数列表。但是返回是函数。

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

cookie、localStorage、sessionStorage

存储方式 作用与特性 存储数量及大小
cookie 1、存储用户信息,获取数据需要与服务器建立连接。2、可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie中,以免影响页面性能。3、可设置过期时间。 1、最好将cookie控制在4095B以内,超出的数据会被忽略。2、IE6或更低版本最多存20个cookie;IE7及以上版本最多可以有50个;Firefox最多50个;chrome和Safari没有做硬性限制。
localStorage 1、存储客户端信息,无需请求服务器。2、数据永久保存,除非用户手动清理客户端缓存。3、开发者可自行封装一个方法,设置失效时间。 5M左右,各浏览器的存储空间有差异。
sessionStorage 1、存储客户端信息,无需请求服务器。2、数据保存在当前会话,刷新页面数据不会被清除,结束会话(关闭浏览器、关闭页面、跳转页面)数据失效。 5M左右,各浏览器的存储空间有差异。

prototype与__proto__

__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性。

__proto__指向的是当前对象的原型对象,而prototype指向的,是以当前函数作为构造函数构造出来的对象的原型对象。

①只要创建了一个函数,该函数的原型对象也随之同时被创建出来,原型对象中的属性和方法被经由其相对应的构造函数所创建的实例所共享。

②每个函数在创建之后都会获得一个prototype的属性,这个属性指向该函数的原型对象。

③每个对象的__proto__属性都指向其构造函数的原型。

function Fun() {}  
var f = new Fun();  
console.log(f.__proto__ === Fun.prototype); // true  
console.log(f.__proto__.__proto__);  
console.log(Fun.__proto__.__proto__);  
console.log(Fun.__proto__.__proto__ === f.__proto__.__proto__); // true  
console.log(f.prototype);  
console.log(Fun.prototype);  

function a() {}  
console.log(a.prototype);  
console.log(a instanceof Function) // true  
console.log(a.__proto__ === Function.prototype) // true  
  • 欢迎关注我的公众号前端历劫之路

  • 回复关键词电子书,即可获取12本前端热门电子书。

  • 回复关键词红宝书第4版,即可获取最新《JavaScript高级程序设计》(第四版)电子书。

  • 我创建了一个技术交流、文章分享群,群里有很多大厂的前端大佬,关注公众号后,点击下方菜单了解更多即可加我微信,期待你的加入。

在前端学习道路上,容易混淆的几个知识点!

本文转转自微信公众号前端历劫之路原创https://mp.weixin.qq.com/s/uKkJyRWYzE1bheLWElPlMA,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
暗箭伤人 暗箭伤人
7个月前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这