携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情 >>
github 优质资源
github 前端技术清单,请查收
CS-Notes
📚 Tech Interview Guide 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统设计
- github
- 摘要
| 算法 | 操作系统 | 网络 | 面向对象 | 数据库 | Java | 系统设计 | 工具 | 编码实践 | 后记 |
|---|---|---|---|---|---|---|---|---|---|
| ✏️ | 💻 | ☁️ | 🎨 | 💾 | ☕️️ | 💡 | 🔧 | 🍉 | 📝 |
✏️ 算法
☁️ 网络
javascript-algorithms
JavaScript 算法与数据结构。本仓库包含了多种基于 JavaScript 的算法与数据结构。每种算法和数据结构都有自己的 README,包含相关说明和链接,以便进一步阅读 (还有 YouTube 视频) 。
算法是如何解决一类问题的明确规范。算法是一组精确定义操作序列的规则。
B- 初学者,A- 进阶
-
-
摘要
30-seconds-of-code
精选 JavaScript 代码段集合,您可以在30秒或更短的时间内理解这些代码段
-
-
摘要
📚 Array
View contents
allallEqualanyarrayToCSVbifurcatebifurcateBychunkcompactcountBycountOccurrencesdeepFlattendifferencedifferenceBydifferenceWithdropdropRightdropRightWhiledropWhileeveryNthfilterFalsyfilterNonUniquefilterNonUniqueByfindLastfindLastIndexmapObjectmaxNminNnone
🌐 Browser
View contents
javascript-questions
JavaScript 进阶问题列表,从基础到进阶,测试你有多了解 JavaScript,刷新你的知识,或者帮助你的 coding 面试! 💪 🚀 我每周都会在这个仓库下更新新的问题。
-
-
摘要
-
- 输出是什么?
function sayHi() { console.log(name) console.log(age) var name = 'Lydia' let age = 21 } sayHi() 复制代码- A:
Lydia和undefined - B:
Lydia和ReferenceError - C:
ReferenceError和21 - D:
undefined和ReferenceError
答案
答案: D
在函数内部,我们首先通过
var关键字声明了name变量。这意味着变量被提升了(内存空间在创建阶段就被设置好了),直到程序运行到定义变量位置之前默认值都是undefined。因为当我们打印name变量时还没有执行到定义变量的位置,因此变量的值保持为undefined。通过
let和const关键字声明的变量也会提升,但是和var不同,它们不会被初始化。在我们声明(初始化)之前是不能访问它们的。这个行为被称之为暂时性死区。当我们试图在声明之前访问它们时,JavaScript 将会抛出一个ReferenceError错误。
-
- 输出是什么?
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1) } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1) } 复制代码- A:
0 1 2和0 1 2 - B:
0 1 2和3 3 3 - C:
3 3 3和0 1 2
答案
答案: C
由于 JavaScript 的事件循环,
setTimeout回调会在遍历结束后才执行。因为在第一个遍历中遍历i是通过var关键字声明的,所以这个值是全局作用域下的。在遍历过程中,我们通过一元操作符++来每次递增i的值。当setTimeout回调执行的时候,i的值等于 3。在第二个遍历中,遍历
i是通过let关键字声明的:通过let和const关键字声明的变量是拥有块级作用域(指的是任何在 {} 中的内容)。在每次的遍历过程中,i都有一个新值,并且每个值都在循环内的作用域中。 -