![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript 学习笔记
文章平均质量分 74
Aproducer
这个作者很懒,什么都没留下…
展开
-
JavaScript 学习笔记 之 作用域 (一) - 作用域是什么
问题:变量存储在哪里?更重要的是,在需要的时候程序如何找到他们? 1.1 编译原理: 尽管通常将JavaScript归类为“动态”或者“解释执行”语言,但事实上它是一门编译语言。但与传统的编译语言不同,他不是提前编译的,编译结果也不能在分布式系统中进行移植。 ----《你不知道的JavaScript》传统编译语言的编译过程(以 var a = 2 为...原创 2018-08-26 18:35:42 · 334 阅读 · 0 评论 -
JavaScript 学习笔记 之 强制类型转换 (一)
值类型转换JavaScript中的值类型转换分两种类型转换(显式,发生在编译阶段) var a = 42; var b = String(a); console.log(typeof b); //string强制类型转换(隐式,发生在运行阶段) var a = 42; var b = a + ""; console.log(typeof b); //st...原创 2018-09-24 19:40:47 · 311 阅读 · 0 评论 -
JavaScript 学习笔记 之 原型 (一)
[[Prototype]]简介关于[[prototype]](__proto__)和prototype对象的不同[[prototype]]是几乎所有对象都有的一个属性,存放的是一个对其他对象的引用,在部分浏览器(在ES6之前不是所有)中可以用.__proto__(两根下划线)这个属性(事实上这个属性也并不直接存在于这个对象中)来进行访问,每个普通的对象的[[prototype]]链最后都会...原创 2018-09-15 01:53:31 · 200 阅读 · 0 评论 -
JavaScript 学习笔记 之 语法
自动分号JavaScript中存在着自动补上分号的行为,即自动分号插入(缩写ASI)ASI只在换行处起作用,而且只有在代码行末尾只有空格或注释的时候才会自动补上分号 //不会自动补分号 var a, b //会自动补分号 var a bJavaScript中规定do..while后面必须带分号,而while和for循环则不需要这时候ASI就非常...原创 2018-10-02 04:32:04 · 269 阅读 · 0 评论 -
JavaScript 学习笔记 之 类型
JavaScript中的类型JavaScript中变量是没有类型的,只有值才有,变量可以随时持有任何类型的值JavaScript中的类型包括了6个基本类型(ES6中新增了一个symbol),和一个复杂类型(object)空值(null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(string) 对象(object) 符号(symb...原创 2018-09-20 21:29:05 · 197 阅读 · 0 评论 -
JavaScript 学习笔记 之 异步(一)
分块的程序JavaScript中的程序是由多个块组成的程序执行时,只有一个块是现在执行,其他的块都是将来再执行最简单常见的块单位是函数 我们在写程序的时候可能会经常遇到一个问题程序中某个块我们并不希望在现在执行的块结束后就立刻执行比如获取后台的数据的块执行完之后,我们希望当后台的数据接收完毕之后再执行打印出数据的块而不是一发送完请求就立刻打印 回调函数是最简...原创 2018-10-03 22:20:44 · 201 阅读 · 0 评论 -
JavaScript 学习笔记 之 异步(二)
并发我们在开发过程中经常会遇到的一个情况是,两个事件同时执行比如在实现一个懒加载的界面的时候用户滚动页面,触发一个ajax请求当用户滚动页面足够快的时候发起一个ajax请求的事件可能会与返回ajax响应的事件同时(同一时间段内,并不需要在同一时刻)执行 像这样(至少)两个事件或者说"进程"同时执行就出现了并发但在JavaScript中,它们的事件是在事件循环队列中依...原创 2018-10-04 00:50:49 · 234 阅读 · 0 评论 -
JavaScript 学习笔记 之 原生函数
原生函数是什么JavaScript的原生函数也叫内建函数例如 String(),Number(),Boolean()等原生函数可以被当做构造函数来使用但通过构造函数(如new String("abc"))创建出来的是封装了基本类型值("abc")的封装对象 var abc = new String("abc"); console.log(typeof abc); //o...原创 2018-09-22 16:00:50 · 384 阅读 · 0 评论 -
JavaScript 学习笔记 之 强制类型转换 (二)
字符串和数字之间的隐式强制类型转换先看一组例子 "42" + "0"; //420 42 + 0; //42这种情况通常我们会理解为,+运算符的任意一边(或者两遍都)出现了字符串则是字符串拼接那么再看一组例子 [1, 2] + [3, 4]; //1,23,4事实上,正确的解读应该是如果某个操作数是字符串或者能通过以下操作(从对象)转换为字符串的话,则...原创 2018-09-27 20:47:52 · 255 阅读 · 0 评论 -
JavaScript 学习笔记 之 强制类型转换 (三)
宽松相等(==)和严格相等(===)为什么这个问题的讨论要放在类型转换这里呢?首先,这里有一个常见的误区,==是检查值是否相等,===是检查值和类型是否相等然而JavaScript中实际上是==允许在比较中进行强制类型转换,而===不允许首先在性能上,两者差别不大(大概百万分之一秒)我们考虑的只有需不需要强制类型转换这一点而已 抽象相等(==)ES5中"抽象相等...原创 2018-09-29 15:44:17 · 233 阅读 · 0 评论 -
JavaScript 学习笔记 之 语句和表达式
语句和表达式语句和表达式的区别就像英语中的句子和短语的区别一样,多个表达式通过标点符号或者连接词连接成语句JavaScript中表达式可以返回一个结果值 var a = 3 * 6; var b = a; b;这三行代码都是包含表达式的语句其中 第一行的3*6 , 第二行的a , 第三行的b都是一个表达式,结果值都是18var a=3*6和var b=a被称为...原创 2018-09-29 22:20:14 · 228 阅读 · 0 评论 -
JavaScript 学习笔记 之 运算符优先级
运算符优先级本文不会具体到每个运算符的优先级比较,而是侧重于介绍运算符优先级在代码中的相关规则 var a = "a", b = "b", c = "c"; a && b || c; //"b" a || b && c; //"a"先来看上面的例子首先JavaScript的默认执行顺序是从左到原创 2018-09-30 20:03:12 · 285 阅读 · 0 评论 -
JavaScript 学习笔记 之 THIS (三) - 绑定规则优先级
this四种绑定规则的优先级排序,箭头函数中的this,使用DMZ对象来安全的忽略this绑定原创 2018-09-11 01:40:31 · 251 阅读 · 0 评论 -
JavaScript 学习笔记 之 THIS (二) - 绑定规则
this绑定的几种规则:默认绑定,隐式绑定,显式绑定,new绑定原创 2018-09-10 23:05:26 · 192 阅读 · 0 评论 -
JavaScript 学习笔记 之 作用域 (二) - 词法作用域
问题:词法作用域是什么?怎么才能在运行时“修改”(也可以说是欺骗)词法作用域呢? 2.1 词法作用域简单的说,词法作用域就是定义在词法阶段的作用域。词法作用域由你写代码时把变量和块作用域写在哪里决定的。因此,当词法分析器处理代码时会保持作用域不变(大部分情况下)。function foo(a) { var b = a * 2; function bar(c) { c...原创 2018-08-27 15:23:19 · 317 阅读 · 0 评论 -
JavaScript 学习笔记 之 作用域 (三) - 函数作用域和块作用域
函数作用域以及块作用域原创 2018-08-28 21:45:11 · 385 阅读 · 0 评论 -
JavaScript 学习笔记 之 作用域 (五) - 闭包
5分钟彻底理解闭包的概念原创 2018-09-01 01:15:39 · 191 阅读 · 0 评论 -
JavaScript 学习笔记 之 作用域 (四) - 提升
4.1 变量提升console.log(a);//<--理解为什么是undefined而不是2,也不是ReferenceError异常。var a=2;引擎会在解释JavaScript代码之前首先对其进行编译,编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来。包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理。例如 var a = 2;J...原创 2018-08-29 20:24:46 · 190 阅读 · 0 评论 -
JavaScript 学习笔记 之 对象 (一) - 声明
对象有两种定义方式声明(文字)形式 var obj = { key: value //.. };构造形式 var obj = new Object(); obj.key = value; //..两种定义方式生成的对象是一样的,唯一的区别在于声明方式一次性能添加多个键值对类型JavaScript有六种主要类型,包括五种简单基本类型(str...原创 2018-09-12 00:47:34 · 192 阅读 · 0 评论 -
JavaScript 学习笔记 之 作用域 (六) - 模块
6、1 模块模式模块模式需要两个必备条件必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例). 封闭函数必须至少返回一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态.function thisIsModule(){ let msg="this is fun"; function fun1(){ conso...原创 2018-09-03 22:41:57 · 163 阅读 · 0 评论 -
JavaScript 学习笔记 之 对象 (二) - 属性描述符
属性描述符的介绍以及应用(不变性)原创 2018-09-12 10:05:06 · 218 阅读 · 0 评论 -
JavaScript 学习笔记 之 原型 (二)
修改原型链在关联两个对象的时候我们通常会使用Object.create(..)方法这个方法接受两个参数第一个参数是创建的对象的[[prototype]]属性引用的对象,第二个参数是想要给新对象添加的属性以及对应的属性描述符 var obj1 = { a: "a" } var obj2 = Object.create(obj1, { b: { value:...原创 2018-09-16 02:41:12 · 175 阅读 · 0 评论 -
JavaScript 学习笔记 之 对象 (三) - [[Get]]和[[Put]]操作
[[Get]]对对象属性的访问看起来似乎是一件很简单的事但事实上这里有个复杂的[[Get]]操作在里面(可以理解为函数调用[[Get]]() )对象默认的内置[[Get]]操作首先是在对象中查找是否有名称相同的属性,有则返回这个属性的值如果没有找到,则会遍历可能存在的[[Prototype]]链(也就是原型链,之后我会专门再出一系列博客来介绍这个)如果无论如何都没找到,name...原创 2018-09-12 14:53:47 · 2249 阅读 · 1 评论 -
JavaScript 学习笔记 之 对象 (四) -遍历和迭代
判断属性是否存在的方式(in操作符或者hasOwnProperty()方法),区分属性是否枚举的方法(propertyIsEnumerable或者Object.keys()方法或者Object.getOwnPropertyName()方法),遍历对象属性的方法,Symbol.iterator的定义和用法原创 2018-09-13 00:30:32 · 263 阅读 · 0 评论 -
JavaScript 学习笔记 之 THIS (一) - 简介
关于this的误解首先,this并不是像它的英语意思一样指向函数本身来看个例子function showThis(){ this.count++; console.log(this.count);}showThis.count=0;showThis();//NaNconsole.log(showThis.count);//0如果this指向调用函数本身的话输出的应...原创 2018-09-10 20:07:06 · 132 阅读 · 0 评论 -
JavaScript 学习笔记 之 回调
Continuation先来看这段异步回调的例子 //A setTimeout(function() { //C }, 1000); //B其中 A B表示程序的前半部分(也就是现在),而C则表示程序的后半部分(也就是将来部分)A,B先执行,等待1s后执行C部分换句话说,回调函数包裹或者说封装了程序的(continuation) 回调的缺点...原创 2018-10-10 22:44:43 · 247 阅读 · 0 评论