浅谈js词法环境-编程思维
JavaScript 词法环境 本文主要讲解JS词法环境,我们将看到什么是词法环境,词法范围如何工作,函数内部的名称如何解析,内部属性,弄清楚词法环境利于我们理解闭包。让我们开始吧... 什么是词法环境? 在理解闭包时,最大的混淆来源是术语“词汇环境”,或者只是“词汇”这个词。在计算机科学中术语“词汇”仅表示“源代码”,或者换句话说,“与写的代码有关”。 大家请考虑以下代码: var a =
morethink program
JavaScript 词法环境 本文主要讲解JS词法环境,我们将看到什么是词法环境,词法范围如何工作,函数内部的名称如何解析,内部属性,弄清楚词法环境利于我们理解闭包。让我们开始吧... 什么是词法环境? 在理解闭包时,最大的混淆来源是术语“词汇环境”,或者只是“词汇”这个词。在计算机科学中术语“词汇”仅表示“源代码”,或者换句话说,“与写的代码有关”。 大家请考虑以下代码: var a =
一、使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度。该 API 返回当前页面的高精度时间戳,您可以在代码执行前后调用它来计算代码执行所需的时间。 例如: let t0 = performance.now(); // 执行需要测试的代码 for (let i = 0; i < 100
一、高阶函数 JavaScript 中的高阶函数是一种接受函数作为输入或返回函数作为输出的函数。它们提供了灵活的方式来处理函数,并允许把函数作为参数或返回值传递。它们是函数式编程的重要组成部分,并且可以提高代码的可读性和可维护性。 高阶函数的一个常见用法是对数组进行操作,例如使用 map()、reduce() 和 filter()。这些函数允许您在数组上应用自定义的函数,并对数组的每个元素执行操
js number array sort bug All In One js array default sort bug // ⚠️ sort 会改变原始数组 arr = [2, -1,-2, 0]; // [2, -1, -2, 0] arr.sort(); // [-1, -2, 0, 2] ❌ arr.sort((a, b) => a - b > 0); // [-
在之前的文章里没有介绍vue项目的目录结构,现在来介绍一下 Vue 项目的目录结构通常如下: . |-- public | |-- favicon.ico | |-- index.html |-- src | |-- assets | | |-- ... | |-- components | | |-- ... | |-- views | | |--
BrootStrap学习笔记 BootStrap模态窗口总结 modal模态窗口类 <div class="modal fade" id="myModal"> modal-dialog对话框类 <div class="modal-dialog"> modal-content内容类 <div class=
如何实现队列和双队列数据结构中队列的核心思想和我们排队买票看电影一样,关键是谁排在前面,谁就可以先买到票。入队(enqeue),顾名思义就是在队伍后面加了一个人排队。按照先入先出的规则,排在最前面的人买完票了以后,就会出队(dequeue)。双队列(deque)通常我们排队的时候,都是遵循先进先出的规则,但是在有些特殊的情况下,也会有特例。在 JavaScript 中呢,同样有一个 unshift
本文首发于微信公众号:大迁世界, 我的微信:qq449245884,我会第一时间和你分享前端行业趋势,学习途径等等。更多开源作品请看 GitHub https://github.com/qq449245884/xiaozhi ,包含一线大厂面试完整考点、资料以及我的系列文章。Markdown 是一种轻量级的标记语言,我们可以用它来格式化纯文本文档。GitHub上的每个仓库都有自己的README文
前言上篇文章5K字 由浅入深聊聊Promise实现原理,中讲述了Promise内部的实现原理。今天来聊聊async与await,那么async与await到底是什么呢。都说是语法糖,就来深入理解下async/await吧来看下MDN的概念async 函数是使用async关键字声明的函数。async 函数是 AsyncFunction 构造函数的实例,并且其中允许使用 await 关键字await
前言我们在 Web 开发过程中,有很多用到音频元素audio的场景,如音乐播放器、语音播放等功能,但是由于原生组件有以下缺点:原生UI样式丑,在追求美观的页面中需要重写元素样式,而且支持重写的样式不多。浏览器兼容问题,不同浏览器的音频元素展示不同。因为以上两个问题,这就导致我们需要对原生的audio进行修改时比较困难。而对于大多数音频的需求,我们可以使用满足我们要求的第三方组件库中选择,如:西瓜播
浏览器截图方案分析页面截屏是前端经常遇到的需求,比如页面生成海报,弹窗图片分享等。以下是我整理三种截图方案:html2canvasdom-to-imagewebRTChtml2canvashtml2canvas 用的比较广泛的前端截图方案,先将 DOM 一个个 转为 Canvas 然后导出图片(使用 canvas 自带的 toDataUrl、toBobl)即可。使用起来应该是兼容性比较好的方案了,
场景:使用ant-design-vue的table组件,要求实现新增,直接在表格中增加一行,双击或单击当前行状态变为可编辑状态,点击其他dom,失去焦点时,进行自动保存。示例:编辑状态@dblclick.native="dbClickFun(record, index, item)" 双击修改当前行状态。record.isEdit设置为[email protected]="blurFjxx($event, rec
接上面两篇继续,我来实现下对话框聊天界面,效果如下图: 全部代码: <template> <div class="chatAppBody"> <div class="chatTitle">标题</div>
普通引入模式下是这样的首先,您需要在iconfont.cn上创建一个账号并添加图标。然后,将iconfont的链接代码加入到页面的head标签中,例如:<link rel="stylesheet" href="//at.alicdn.com/t/font_123456_abcdefghijklmno.css">最后,使用以下方式在页面中使用图标:<i class="iconfon
某些场景下,我们拿到的键名与预期的键名不符,这个时候就需要替换键名来得到我们想要的内容let obj = [ { id:1, title:'zs' }, { id:2, title:'ls' } ]; // 但是我们实际想要的效果是: {id:1,name:'zs'} // 此时可以把对象转为string 然后使用字符串方法替换 conso
TS的基础使用// 数字 let num = ref<number>(100) // 文字 let str = rer<string>('文字') // boolean let bo = ref<boolean>(true) // null let n = ref<null>(null) // undefined let u = ref<
单链表链表就是把零散的节点(node)串联起来的一种数据结构。在每个节点里,会有两个核心元素,一个是数据,一个是下一个节点的地址,我们称之为后继指针(next)class Node { constructor(data){ this.data = data; this.next = null; } }class LinkedList { constructor(){