【金秋打卡】第9天 从函数到函数式编程之路
标签:
JavaScript
课程名称:破解JavaScript高级玩法
课程章节:第6章 从函数到函数式编程之路
主讲老师:Cloud
课程内容:
今天学习的内容包括:
6-11 手写call居然隐藏十大知识点——call在严格模式和非严格模式情况下的不同情况的知识点了解。
6-12 综合训练
课程收获:
手写call知识点
- eval
- new Function
- 内容安全策略CSP
- 属性冻结
- 对象属性检查
- 面试感知
- ECMA规范和浏览器厂商之间的爱恨情仇
- undefined
- —元运算符void
- 数据类型判断
- 严格模式和非严格模式
- this
- 运行环境识别
- 一元运算符delete
- 函数副作用
手写的思路
- 某个方法进行call调用时,等同于把方法作为call的第一个参数某个属性,并进行进行调用。
- fun.call(obj, …args) === ( obj.fun= fun; obj.fun(…args) )
版本2存在的问题
- this是不是可以被调用
- undefined安不安全
- window作为默认上下文,过于武断
- eval一定会被允许执行吗
- delete context.fn有没有产生副作用
不可靠的undefined
- 有可能被改写
- void 0
环境识别
- 浏览器环境
- nodejs环境
- 综合判断
严格模式
- 是否支持严格模式
- 是否处于严格模式
函数副作用
- 函数调用后,破坏了原对象
基于eval的实现
- 有没有严格模式
- 支不支持严格模式
- 获取全局对象
- 判断是不是函数
- 包装上下文
- 生成属性名
- 拼接动态参数
- …
基于eval的实现
- 严格模式下的妥协
- 属性名依旧是可能重名
- eval可能被禁用
基于new Function的实现
- 动态参数
- 对象可能被冻结,Object.freeze
课后练习
- 如果有效的判断被执行的函数是否在严格模式下执行
- 请解决传入的thisArg被冻结的问题
今天 学习了手写call居然隐藏十大知识点,这些底层属性点相关的知识点掌握还是不够的,自己听着也是很迷糊,不知道有什么用处,还是要多学多用。对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦