js
文章平均质量分 66
萌圆圆不萌
这个作者很懒,什么都没留下…
展开
-
let到底会不会造成变量提升
let到底会不会造成变量提升呢?关于这个问题,大家可以先在心中想想现在自己的答案,我们继续往下看:今天有个群里有人提了这个问题,大部分人都说不会,但是在我的印象里是觉得会的,但是太多不同的声音,让我也开始怀疑自己,到底会不会提升呢?于是我又翻起了红宝书,在红宝书(第四版)第26页,有这么一句话:let 与 var 的另一个重要的区别,就是 let 声明的变量不会在作用域中被提升。但是在往后翻翻,在第92页又写了这么一句话:严格来讲,let 在 JavaScript 运行时中也会被提升,但由原创 2022-01-18 13:33:21 · 2054 阅读 · 1 评论 -
JS reduce基本使用及高阶函数compose
先介绍下reduce基本用法:reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值array.reduce(function(total, currentValue, currentIndex, arr), initialValue)这里注意,reduce() 方法接受一个函数作为累加器。先看两个例子,理解下是否设置初始值的情况:var arr = [1, 2, 3, 4];var sum = arr.reduce(function(prev,原创 2021-08-30 15:24:59 · 333 阅读 · 0 评论 -
在 chrome 调试工具中,Form Data 和 Request Payload 有什么区别?
前端和后端,都是通过XHRHttpRequest对象来进行数据传输,并通过setRequestHeader()来改变Content-Type。Request Payload如果希望看到 Request Payload,需要设置请求头部 Content-Type: application/json,再将数据经过 JSON.stringify 序列化后发送。后端接到 http 请求后,就是截取空行后的这个请求体解析,因为我们传了 Content-Type: application/json,所以后端知道请原创 2021-06-28 16:36:44 · 2852 阅读 · 0 评论 -
document.execCommand(‘copy‘) 复制不成功 不同浏览器兼容问题
前几天遇到了一个js复制在不同浏览器下行为不同问题,花了几个小时看问题,最后发现竟然是js在ajax中执行剪切板操作会有问题。场景是这样的:复制的内容是可配置的,所以进行复制操作前需要进行请求。具体问题:复制操作在chrome浏览器和360浏览器上是正常的,在QQ浏览器和UC浏览器上复制不成功。实现复制主要代码:// for ieif (window.clipboardData) { window.clipboardData.clearData(); window.clipboardData.原创 2020-09-14 14:32:42 · 14346 阅读 · 4 评论 -
addEventListener多次触发,removeEventListener不生效问题
这两天写了个小功能封装成api供别人使用,在开发中遇到了些问题,记录下。项目情况是有地方触发多次执行这部分代码,所以我想在每次add前先remove掉。用addEventListener绑定事件,但是addEventListener可以给同一元素多次绑定同一事件,导致多次触发。然后就想到用removeEventListener来移除之前绑定的事件。但是,一切都没有那么顺利...第一...原创 2018-10-26 09:42:34 · 11826 阅读 · 4 评论 -
【JS】《JavaScript设计模式》 之 JS继承
以前在准备面试的时候经常会看到面试题里有js实现继承的相关题,总觉得很少用的到,也没有太理解为什么要那么写,只是硬记下来了。最近在看《JavaScript设计模式》,里面有一节很详细的讲到了js继承,后面的模式里也经常用到,在这里记录下。1.子类的原型对象——类式继承// 声明父类function SuperClass() { this.superValue = true}...原创 2018-11-12 14:36:22 · 532 阅读 · 0 评论 -
从输入URL到页面加载的过程
先梳理下主干流程:从浏览器接收url到开启网络请求线程 开启网络线程到发出一个完整的http请求 从服务器接收到请求到对应后台接收到请求 后台和前台的http交互 缓存问题,http的缓存 浏览器接收到http数据包后的解析流程 CSS的可视化格式模型 JS引擎解析过程1. 从浏览器接收url到开启网络请求线程多进程的浏览器浏览器是多进程的,有一个主控进程,以及每一个t...转载 2019-03-12 16:42:09 · 297 阅读 · 0 评论 -
自调用匿名函数
开发中有时候需要我们自己封装api,这时候就会用到自调用匿名函数。那么自调用匿名函数是什么呢?(function(){ // code})()包围函数(function(){}) 的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。例如:...原创 2019-05-16 16:12:41 · 429 阅读 · 0 评论 -
jQuery的attr和prop区别
本文的开始,我们先看一个例子:<!DOCTYPE html><html><body> <input type="checkbox" />test <script src="http://libs.baidu.com/jquery/1.6.1/jquery.min.js"></script> <...原创 2019-06-10 19:09:23 · 218 阅读 · 0 评论 -
js实现复制图片到剪切板&下载图片
完整需求是这样的:生成一个二维码,然后提供复制和下载按钮。如果你是页面上已有一个图片,可以直接跳过前面的部分。生成二维码,可以用qrcode。http://cdn.staticfile.org/jquery.qrcode/1.0/jquery.qrcode.min.jsgithub地址:https://github.com/davidshimjs/qrcodejs$('#code').qr...原创 2019-08-12 17:44:37 · 7543 阅读 · 1 评论 -
localStorage、sessionStorage、cookie的区别、用法及使用场景
参考文章:https://segmentfault.com/a/1190000004556040 https://segmentfault.com/a/1190000012057010#articleHeader0webStorage是本地存储,存储在客户端,包括localStorage和sessionStorage。localStoragelo...原创 2018-09-21 11:20:05 · 1130 阅读 · 0 评论 -
【JS】根据数组对象的属性值把 一维数组转为二维数组
以下例子是根据time属性把一维数组转为二维数组。先定义一个数组:const array = [ { id: 123, time: '2018-7', name: 'aaa' }, { id: 123, time: '2018-8', name: 'aaa' }...原创 2018-09-12 10:08:20 · 3447 阅读 · 1 评论 -
【JS】JS引用类型指针
先看下下面这个例子:var test = 111;var obj = { a:test, b:function () { test=222; return test; }};console.log(obj.a); //111console.log(obj.b()); //222console.log(test); //2...原创 2018-03-01 13:44:33 · 859 阅读 · 0 评论 -
【js】JavaScript函数,函数声明与函数表达式
1.函数理解函数是对象,函数名是指针,函数名仅仅是指向函数的指针function sum(num1,num2) { return num1+num2;} //sum指向函数Aconsole.log(sum(10,10)); //20var anotherSum = sum; //anotherSum也指向函数Aconsole.log(anotherSum(1...原创 2018-03-05 09:09:30 · 290 阅读 · 0 评论 -
【ES6】let和const
基本语法let---只在声明变量所在的代码块内有效,函数内部使用let定以后,对函数外部无影响。var a = [];for(var i = 0; i < 10; i++){ a[i] = function () { console.log(i); }}a[6](); //10上面代码中,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个...原创 2018-04-16 17:37:34 · 177 阅读 · 0 评论 -
【JS时间操作】 js获取n天之后的日期、n月之后的日期、某月最后一天的日期、某周周一和周日的日期
首先写一个函数将日期转成你想要的格式function timeToStr (date) { const Y = date.getFullYear() + '-' const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-' const D = (date...原创 2018-07-10 10:28:41 · 1276 阅读 · 0 评论 -
【JS】new一个对象发生了什么
1、创建一个新对象var obj = {}2、让构造函数classA的this指向obj,并执行构造函数中的代码(为新对象添加属性)classA.call(obj)3、设置新对象的_proto_属性指向构造函数classA的prototype对象obj._proto_ = classA.prototype4、返回该对象(对于一个构造函数即使它最后没有return...原创 2018-08-07 10:26:26 · 1446 阅读 · 0 评论 -
【JS】深拷贝与浅拷贝,实现深拷贝的几种方法
本文部分内容来自https://www.cnblogs.com/echolun/p/7889848.html昨天学习ES6的Object.assign()的时候,发现Object.assign进行的拷贝是浅拷贝,及只有第一层是深拷贝。若拷贝的属性的值是对象的复合属性,就只是拷贝过来一个引用。const obj1 = {'a': {'b': 1}}const obj2 = Object....转载 2018-08-07 14:37:10 · 6211 阅读 · 1 评论 -
【JS】 JS作用域
JS没有块级作用域,理解起来可能有点困难。先看下面这个例子:if (true) { var color = 'blue'}console.log(color) //'blue'这里是在一个if语句中定义了变量color,如果是在C、C++或Java中,color会在if语句执行完毕后被销毁。但在JS中,if语句中的变量声明会将变量添加到当前的执行环境(这里是全局变量)中。...原创 2018-08-16 13:58:18 · 301 阅读 · 0 评论 -
【JS】js 垃圾回收机制
JS执行环境会负责管理代码执行环境中使用的内存。垃圾回收机制de的原理其实很简单:找出那些不再继续使用的变量,然后释放其占用的内存。垃圾回收器会按照固定的时间间隔,周期性的执行这一操作。垃圾收集器对不再有用的变量打上标记,以备将来收回其占用的内存。浏览器中的实现,通常有两个策略:1、标记清除当变量进入环境时,就将这个变量标记为“进入环境”。当变量离开环境时,则标记为“离开环境”。垃...原创 2018-08-16 14:00:40 · 285 阅读 · 0 评论 -
【JS】正则表达式 匹配索引导致匹配失败问题
先看下面这个例子:var re = /cat/gfor (var i = 0; i < 10; i++) { console.log(re.test('catfgfdjkgh'))} 我们会发现得到的结果是true false true false……,可能和我们预想的不一样。这是因为第一次调用test()找到了‘cat’,但第二次调用是从索引为3的字符(上一次匹配的...原创 2018-08-16 15:57:10 · 1148 阅读 · 1 评论 -
XMLHttpRequest对象
1. XHR的用法在使用XHR对象时,要调用的第一个方法是open(),它接受3个参数:要发送的请求的类型(“get”、“post”等)、请求的URL和表示是否异步发送请求的布尔值。xhr.open("get", "example.php", false)调用open()方法并不会真正发送请求,而只是启动一个请求以备发送。要发送特定的请求,必须像下面这样调用send()方法:...原创 2018-09-03 16:08:00 · 216 阅读 · 0 评论 -
【JQ】jQuery改变css伪元素样式
伪元素是什么?例如 :bofore、:after伪元素不是dom,不能直接操作。若有以下html和css,通过操作伪元素改变图标颜色:<div class = "table-container"> <span class="glyphicon glyphicon-number"></span></div>.glyphicon-numbe...转载 2018-02-27 16:32:19 · 7944 阅读 · 0 评论