随笔分类 - JS
原生JavaScript语法相关
摘要:原生JavaScript实现函数的防抖和节流 参考:https://www.jianshu.com/p/c8b86b09daf0 想详细了解的直接戳上面链接了,讲得非常清楚。下面只给代码和我自己写的注释,帮助理解背后实现的逻辑。 防抖(Debounce) 所谓防抖,就是指触发事件后在 n 秒内函数只
阅读全文
摘要:首先要理解调用位置: 调用位置就是函数在代码中被调用的位置(而不是声明的位置)。 最重要的是要分析调用栈(就是为了到达当前执行位置所调用的所有函数)。 我们关心的调用位置就在当前正在执行的函数的前一个调用中。 javascript function foo(a) { this.a = a; } va
阅读全文
摘要:this 指向函数的作用域是一种常见的误解,this 在任何情况下都不指向函数的词法作用域。 在 JavaScript 内部, 作用域确实和对象类似, 可见的标识符都是它的属性。 但是 作用域“对象” 无法通过 JavaScript代码访问, 它存在于 JavaScript 引擎内部 。 每当你想要
阅读全文
摘要:动态作用域让作用域作为一个在运行时就被动态确定的形式, 而不是在写代码时进行静态确定的形式。动态作用域并不关心函数和作用域是如何声明以及在何处声明的, 只关心它们从何处调用。 换句话说, 作用域链是基于调用栈的, 而不是代码中的作用域嵌套。 词法作用域: 词法作用域让 foo() 中的 a 通过 R
阅读全文
摘要:当函数可以记住并访问所在的词法作用域时, 就产生了闭包, 即使函数是在当前词法作用域之外执行。 将一个内部函数( 名为 timer) 传递给 setTimeout(..)。 timer 具有涵盖 wait(..) 作用域的闭包, 因此还保有对变量 message 的引用。wait(..) 执行 10
阅读全文
摘要:关于函数声明:如果 function 是声明中的第一个词, 那么就是一个函数声明, 否则就是一个函数表达式。例如匿名函数这种形式,函数会被当作函数表达式而不是一个标准的函数声明来处理。 这种表达式有另外一种用途是倒置代码的运行顺序, 将需要运行的函数放在第二位, 在 IIFE执行之后当作参数传递进去
阅读全文
摘要:关于函数声明:如果 function 是声明中的第一个词, 那么就是一个函数声明, 否则就是一个函数表达式。例如匿名函数这种形式,函数会被当作函数表达式而不是一个标准的函数声明来处理。 这种表达式有另外一种用途是倒置代码的运行顺序, 将需要运行的函数放在第二位, 在 IIFE执行之后当作参数传递进去
阅读全文
摘要:Javascript是一门编译语言,它不是提前编译的, 编译结果也不能在分布式系统中进行移植。 在传统编译语言的流程中, 程序中的一段源代码在执行之前会经历三个步骤, 统称为“编译”: 1. 分词/词法分析(将由字符组成的字符串分解成(对编程语言来说) 有意义的代码块, 这些代 码块被称为词法单元
阅读全文
摘要:词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规则。 词法作用域最重要的特征是它的定义过程发生在代码的书写阶段(假设你没有使用eval() 或 with) 欺骗词法:指修改词法作用域, 欺骗词法作用域会导致性能下降。 两种方法: eval 和 with。eval(..) 函数如果接受了含
阅读全文
摘要:fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象。 cookie,localStorage,sessionStorage,indexDB + cookie 由服务器通过返回响应在浏览器上设置,用于存储会话信息的。性质上是绑定在特定的域名下的,当设定了一
阅读全文
摘要:CORS(cross origin resource sharing)跨域资源共享 来源: 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 简介 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 整
阅读全文
摘要:Ajax(Asynchronous JavaScript and XML) 这种技术就是无须刷新页面即可从服务器中取得数据,但不一定是XML数据。在原生方法上,Ajax技术的核心是XMLHttpRequest对象(简称XHR)。 XHR用法 + open(method, url, isAsync)
阅读全文
摘要:async函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是 Generator 函数的语法糖 什么是语法糖? 意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。
阅读全文
摘要:Iterator 迭代器是一种接口、是一种机制。 为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 Iterator 的作用有三个: 1. 为各种数据结构,提供一个统一的、简便的访问接口; 2. 使得数据结构
阅读全文
摘要:DOM 常用的DOM获取方法: + node.children 返回子元素节点,没有兼容性问题,动态获取 + node.parentNode 获取父节点,没有兼容性问题 + node.offsetParent 获取最近的定位父节点 + node.tagName 获取元素节点的标签名 常用的DOM操作
阅读全文
摘要:Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 Promise对象代表一个异步操作,有三种状态: pending(进行中)、ful
阅读全文
摘要:Symbol + 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和原来的属性名发送冲突,显然我们是不希望这种情况发生的。所以,我们需要确保每个属性名都是独一无二的
阅读全文
摘要:JavaScript异步机制 来源: JavaScript是单线程异步执行的,单线程意味着代码在任务队列中会按照顺序一个接一个的执行。异步代表JavaScript代码在任务队列中的顺序并不完全等同于代码的书写顺序,比如事件绑定、Ajax、setTimeout()等任务的发生时间是“不可被预期”的。
阅读全文
摘要:面向对象编程 面向对象的三大特征:继承,封装,多态 ES5的面向对象 ES5中用构造函数来模拟类的概念,可以根据传入的参数不同来定制具有不同属性或方法的实例,因此构造函数中存放的是私有的属性。 而每个构造函数会存在一个原型的概念(一个对象),里面存放的是公有属性,为每一个由构造函数而构造出来的实例所
阅读全文
摘要:数组的冒泡、选择和插入排序法 冒泡排序法(从小到大) ES6函数参数的默认值 + 设定默认值的参数应该是函数的尾参数,只有在该值为undefined的情况下才会取得默认值 + 指定默认值后,函数的length属性会失真,将返回没有指定默认值的形参个数。 + 一旦设置了参数的默认值,函数进行声明初始化
阅读全文