你不知道的js上卷
EDB
这个作者很懒,什么都没留下…
展开
-
第一章 作用域是什么
LHS查询: 查早变量所在的地址,如果在作用域链中,找不到那么在全局环境下进行声明,但是在严格模式下找不到就会报ReferenceError的错误RHS查询: 查早变量的值,如果如果在作用域链找不到,报ReferenceError的错误, 如找到了但对这个值进行不合理的操作,调用非函数类型,或者引用null或undefined类型中的值,那么会抛出TypeError的错误...原创 2018-11-22 21:05:51 · 119 阅读 · 0 评论 -
第二章 词法作用域
其实就是指的我们平时说的作用域、作用域链这些。查找词法作用域查找,只会查早一级标识符,如果遇到了foo.bar.baz这种,词法作用域只会查找foo标识符,找到这个变量之后,对象的访问属性规则会分别接管对bar和baz属性的访问。欺骗词法这种做法会导致性能下降,因为他们会修改或者创建新的作用域。javaScript引擎会在编译阶段进行数项优化,其中有一项就是能够根据代码的词法进行静态分析,...原创 2018-11-22 21:32:01 · 126 阅读 · 0 评论 -
第三章 函数作用域和块作用域
函数作用域可以使用作用域来隐藏变量,在软件设计中,应该最小限度的暴露必要内容规避命名冲突匿名函数是一个函数表达式块级作用域let、const。可以这样写{ let bar = xxx;}这是一个块,在闭包中我们可以使用这样的块来释放闭包占用的多余内存。如下function test() { function process(data){......} var bigD...原创 2018-11-22 22:57:38 · 223 阅读 · 0 评论 -
第四章 提升
var a = 10会被看作两个部分var aa = 10第一个部分是预编译阶段的任务,第二个阶段是执行阶段的任务,而且预编译阶段会将所有的变量进行提升。如果是函数声明,那么预编译阶段会被赋值,而函数表达式在这个阶段不会被赋值如果是具名的函数表达式,那么名称标识符不会被提升,例如:foo() // TypeErrortest() // ReferenceErrorvar...原创 2018-12-13 10:07:33 · 111 阅读 · 0 评论 -
第五章 作用域闭包
当函数可以记住并访问所在的词法作用域,就产生了闭包循环中闭包问题的解决for (var i = 0; i <= 5; i++) { setTimeout( function timer () { console.log(i) }, i * 1000)}这里就涉及到事件的轮询机制。异步事件和同步事件,异步事件会在最后执行。要解决上面的问题有两种方法,分别是使用立即执行函数和...原创 2018-12-13 11:49:19 · 169 阅读 · 0 评论 -
第二章 this全面解析
在使用call、apply的时候,如果传入了一个原始值,那么会被转会成它的对象形式,例如字符串会被转换成字符串形式硬绑定不管是隐式绑定还是显示绑定,都会出现this绑定丢失的问题, 硬绑定就是用来解决this丢失绑定的问题,它是显示绑定的一个变种var obj = { a: 2}function foo () {}function bar () { foo.call(obj)...原创 2018-12-14 16:44:27 · 191 阅读 · 0 评论 -
第三章 对象
如果像对象一样使用数组,通过.语法给数组添加了属性,数组的length属性不会发生改变给数组添加属性,如果属性名看起来像一个数字,那么它会被当作一个数组下标,思考下面的代码var myArray = ["foo", 42]myArray["2"] = "baz" // 注意这里myArray.length // 3myArray[3] // "baz"深拷贝: JSON.par...原创 2018-12-16 14:56:15 · 144 阅读 · 0 评论 -
混合对象 类 第四章
类的特性类是一种设计模式继承多态多重继承javascript中模拟类的复制行为分为两种类型的混入,显示、隐士显式混入定义一个混入函数mixin,分别接收源对象和要复制到的目标对象function mixin( sourceObj, targetObj ) { for ( var key in sourceObj ) { if (!( key in targetObj ...原创 2018-12-17 18:35:00 · 201 阅读 · 0 评论 -
第五章 原型[[Prototype]]
属性设置和屏蔽当执行obj.a这段代码,且a不直接存在于obj上时如果原型链上不存在a,a就会被直接添加到obj上如果存在,并且writeable: true,那么也会被直接添加到obj上如果存在,但是writeable: false,那么即无法修改,也无法创建属性如果存在,并且它是一个setter,那不管怎么都会调用这个函数如果希望前面两种情况直接像第二种情况一样屏蔽掉原型链上的a...原创 2018-12-18 22:44:14 · 160 阅读 · 0 评论