你不知道的 Javascript

作用域

词法作用域:编译阶段确定(欺骗词法作用域 eval with)

块作用域 with try/catch let const

提升

定义提升 函数优先

闭包

将内部函数传递到所在作用域以外,它都会持有对原始定义作用域的引用,无论何处执行这个函数都会使用闭包。

循环+闭包

模块机制闭包的作用

This

默认绑定 隐式绑定 显式绑定(硬绑定 call apply bind) new绑定

默认绑定

隐式绑定

别名丢失隐式绑定

回调丢失隐式绑定

显式绑定

new绑定

this丢失

局部变量修复

bind修复

es6绑定

对象

类型 string number boolean null undefined object

对象 String Number Boolean Object Function Array Date RegExp Error

属性描述符ES5

可写

可枚举

可配置(不可配置:不能删除,能修改)

禁止拓展属性

密封(禁止拓展属性+不可配置)(preventExtensions+each(configurable: false))

冻结(密封+不可修改属性值)(seal+each(writable:false))

[[get]]获取对象属性会执行[[get]]操作,自身没有的属性会在原型链上查找,都没有返回undefined

[[put]] 对象赋值触发[[put]],在赋值前会检查对象属性描述,例如不可写会失败

[[put]] 自身存在setter方法,会优先调用setter,如果原型链上有同名setter,会调用原型链的setter

getter

setter 一般使用_property_表示屏蔽属性

js没有类(继承是复制,js某些部分是引用)

类是一种设计模式,可以被模拟:混入

原型

prototype

行为委托

行为委托是除了类之外,更清晰的一种继承设计模式

 

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

3 9 收藏 评论

关于作者:ascoders

前端小魔法师 个人主页 · 我的文章 · 7

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部