后话
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
对于面试,说几句个人观点。
面试,说到底是一种考试。正如我们一直批判应试教育脱离教育的本质,为了面试学习技术也脱离了技术的初心。但考试对于人才选拔的有效性是毋庸置疑的,几千年来一直如此。除非你有实力向公司证明你足够优秀,否则,还是得乖乖准备面试。这也并不妨碍你在通过面试之后按自己的方式学习。
其实在面试准备阶段,个人的收获是很大的,我也认为这是一种不错的学习方式。首先,面试问题大部分基础而且深入,这些是平时工作的基础。就好像我们之前一直不明白学习语文的意义,但它的意义就在每天的谈话间。
所谓面试造火箭,工作拧螺丝。面试往往有更高的要求,也迫使我们更专心更深入地去学习一些知识,也何尝不是一种好事。
const 声明的常量不得改变值。这意味着, const 一旦声明常量,就必须立即初始化,不 能留到以后赋值
2. 如何在ES5环境下实现let
对于这个问题,我们可以直接查看babel
转换前后的结果,看一下在循环中通过let定义的变量是如何解决变量提升的问题
babel在let定义的变量前加了道下划线,避免在块级作用域外访问到该变量,除了对变量名的转换,我们也可以通过自执行函数来模拟块级作用域
3. 如何在ES5环境下实现const
实现const的关键在于Object.defineProperty()这个API,这个API用于在一个对象上增加或修改属性。通过配置属性描述符,可以精确地控制属性行为。Object.defineProperty() 接收三个参数:
Object.defineProperty(obj, prop, desc)
对于const不可修改的特性,我们通过设置writable属性来实现
4.const的本质是什么
const 实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。 对于简单类型的数据(数值、字符串、布尔值〉而言,值就保存在变量指向的内存地址中,因 此等同于常量。但对于复合类型的数据(主要是对象和数组)而言,变量指向的内存地址保存 的只是一个指针, const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的, 这完全不能控制。 因此,将一个对象声明为常量时必须非常小心。
5既然const不能保证 对象属性不被修改,那该怎么解决这个问题呢?
如果真的想将对象冻结,应该使用 Object.freeze
方法。
查看Object.freeze
的用法与描述
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
6但是这样就能保证 对象冻结了吗?
不,因为Object.freeze()只能冻结基本数据类型的属性,若是属性还是引用类型的话,那就冻结不了了,因此,除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数。
7既然你提到了Object.freeze,你能说下他的原理 吗
Object.freeze()
的功能主要就是使对象属性冻结起来,这个功能跟 上面模拟const 类似,可以用Object.definedProperty()
Object.definedProperty()
方法可以定义对象的属性的特性。如可不可以删除、可不可以修改、访问这个属性的时候添油加醋等等。。 所以,我们可以这样写:
8 但是这样就完整了没,你有没有发现问题呢?
emmmmm,的确还有个问题,就是Object.definedProperty()
只是设置了 对象的属性,也就是说,要是此时我使用 给对象添加属性,还是可以的,因此还有个问题要解决,就是使对象不能 添加新的属性,而要限制 拓展功能,我想到了Object.seal(),
查看Object.seal介绍:
**Object.seal()**方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。
因此用Object.seal()
和Object.definedProperty()
就可以实现Object.freeze()
9 ES6之前真的没有块级作用域吗?
可以看下这道题,答案是什么
正确答案:内部是 21,外部是 1;
这个玄妙之处确实就在这个块级作用域 if 里面。
总结
三套“算法宝典”
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
算法刷题LeetCode中文版(为例)
人与人存在很大的不同,我们都拥有各自的目标,在一线城市漂泊的我偶尔也会羡慕在老家踏踏实实开开心心养老的人,但是我深刻知道自己想要的是一年比一年有进步。
最后,我想说的是,无论你现在什么年龄,位于什么城市,拥有什么背景或学历,跟你比较的人永远都是你自己,所以明年的你看看与今年的你是否有差距,不想做咸鱼的人,只能用尽全力去跳跃。祝愿,明年的你会更好!