javascript - Javascript 提升和附加功能
问题描述
大家好,
这不是一个具体的问题,而是一个普遍的问题。
特别是,我正在准备与 Javascript 相关的面试。在 Glassdoor 上,我看到有人之前提到过,“什么是 Javascript 提升?” 是一个被问到的问题。
本质上,我想知道我应该研究什么类型的 Javascript 材料才能深入了解它。
现在,理想情况下,您会告诉我读一本书并尽可能多地了解 Javascript,例如如果有人问我什么是提升,我将能够“自然地”回答它。
然而,这引发了我一个重要的想法,因为我知道我的时间有限,能够“聪明”地学习面试将是未来面试的一项好技能,这可能不一定会测试 Javascript 知识。
提升是否被视为 Javascript 的“功能”?这种现象叫什么,是否有专门突出一种语言与大多数其他语言的主要特征的书籍。
这是一个非常模糊的问题,但本质上我想找到一种方法,让我可以深入了解编程语言的特性,而不必从一开始就学习。
希望这是有道理的!
最好的问候,安迪
解决方案
我想你可以称之为功能。过去,您需要确保在调用每个函数之前定义了每个函数,并且所有内容都将按照编写的顺序进行编译:想想类似var myCat = new Cat(); function Cat() { ... }
的东西,代码会在标记处抛出错误new Cat()
(类似的东西undefined is not a constructor
),因为,在new Cat()
执行时,Cat
函数从未定义过。它稍后在代码中定义。
使用提升,变量声明在编译时加载到内存中,您可以在声明之前初始化和使用变量/函数,这意味着您不必担心这种冲突。这就是它的全部。它实际上是一种编译时优化 - 让人们的生活更轻松,例如for (var i = 0; i < array.length; i++)
由于Array.prototype.forEach
内置的原因,数组迭代在很大程度上被弃用(在闭包编译代码之外等)。
您可以在MDN 的 Web Docs上阅读有关函数提升的更多信息。
// call to catName before declaration
catName("Chloe");
function catName(name) {
console.log(`My cat's name is ${name}!`);
}
推荐阅读
- android - 有没有使用颤振检测修改后的应用程序的解决方案?
- jquery - 如何使用 jQuery 在 `focus in` 上正确捕获 HTML 表格单元格 (td) 值
- java - 重置可变类字段
- php - Laravel 7.x - 如何比较规则验证中的两个字段?
- java - 如何向我的 Java JFrame 添加一些声音?
- javascript - 我可以将一个数组动态插入到我从正则表达式匹配生成的 mysql 中吗?
- android - 错误颤动NoSuchMethodError(NoSuchMethodError:在null上调用了getter'length'。接收者:null
- sql - PostgreSQL 命名空间(pg_namespace 目录)
- sql - Postgres:全局设置总是以完全相同的格式返回 TIMESTAMPTZ?即:6 位亚秒 + 4 位时区偏移
- python - 为样本量等于另一列值的组的随机样本分配 1 个值