先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
多行注释以一个斜杠和一个星号(/)开头,以它们的反向组合(/)结尾,如:
/* 这是多行
注释 */
严格模式
ECMAScript 5
增加了严格模式(strict mode
)的概念。严格模式是一种不同的 JavaScript 解析和执行模型,ECMAScript 3 的
一些不规范写法在这种模式下会被处理,对于不安全的活动将抛出错误。要对整个脚本启用严格模式,在脚本开头加上这一行:
‘use strict’
虽然看起来像个没有赋值给任何变量的字符串,但它其实是一个预处理指令。任何支持 JavaScript 的引擎看到它都会切换到严格模式。选择这种语法形式的目的是不破坏 ECMAScript 3
语法。
也可以单独指定一个函数在严格模式下执行,只要把这个预处理指令放到函数体开头即可:
function doSomething() {
‘use strict’
// 函数体
}
严格模式会影响 JavaScript 执行的很多方面,所有现代浏览器都支持严格模式。
语句
ECMAScript
中的语句以分号结尾。省略分号意味着由解析器确定语句在哪里结尾,如下面的例子所示:
var sum = a + b // 没有分号也有效,但不推荐
var diff = a - b // 加分号有效,推荐
即使语句末尾的分号不是必需的,也应该加上。记着加分号有助于防止省略造成的问题,比如可以避免输入内容不完整。此外,加分号也便于开发者通过删除空行来压缩代码(如果没有结尾的分号,只删除空行,则会导致语法错误)。加分号也有助于在某些情况下提升性能,因为解析器会尝试在合适的位置补上分号以纠正语法错误。
关键字与保留字
ECMA-262
描述了一组保留的关键字,这些关键字有特殊用途,比如表示控制语句的开始和结束,或者执行特定的操作。按照规定,保留的关键字不能用作标识符或属性名。
break do in typeof
case else instanceof var
catch export new void
class extends return while
const finally super with
continue for switch yield
debugger function this
default if throw
delete import try
规范中也描述了一组未来的保留字,同样不能用作标识符或属性名。虽然保留字在语言中没有特定用途,但它们是保留给将来做关键字用的。以下是 ECMA-262
第 6 版为将来保留的所有词汇。
始终保留:
enum
严格模式下保留
implements package public
interface protected static
let private
模块代码中保留
await
在 JavaScript 中,有 3 个关键字可以声明变量: var
、const
和 let
。其中,var
在 ECMAScript
的所有版本中都可以使用,而 const
和let
只能在ECMAScript 6
(将在后面学到) 及更晚的版本中使用。
var 关键字
要定义变量,可以使用 var
关键字,后跟变量名:
var xhsRookies
这行代码定义了一个名为 xhsRookies
的变量,可以用它保存任何类型的值。ECMAScript
实现变量初始化,因此可以同时定义变量并设置它的值:
var xhsRookies = ‘hi’
xhsRookies
被定义为一个保存字符串值hi
的变量。像这样初始化变量不会将它标识为字符串类型,只是一个简单的赋值而已。随后,不仅可以改变保存的值,也可以改变值的类型:
var xhsRookies = ‘hi’
xhsRookies = 100 // 合法,但不推荐
在这个例子中,变量 xhsRookies
首先被定义为一个保存字符串值hi
的变量,然后又被重写为保存了数值 100 。虽然不推荐改变变量保存值的类型,但这在ECMAScript
中是完全有效的。
1. var 声明作用域
使用 var
操作符定义的变量会成为包含它的函数的局部变量。比如,使用 var
在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁:
function xhsTest() {
var xhsRookies = ‘hi’ // 局部变量
}
xhsTest()
console.log(xhsRookies) // 出错!
这里,xhsRookies
变量是在函数内部使用var
定义的。函数叫 xhsTest()
,调用它会创建这个变量并给它赋值。调用之后变量随即被销毁,因此示例中的最后一行会导致错误。不过,在函数内定义变量时省略 var
操作符,可以创建一个全局变量:
function xhsTest() {
xhsRookies = ‘hi’ // 全局变量
}
xhsTest()
console.log(xhsRookies) // “hi”
去掉之前的 var
之后,xhsRookies
就变成了全局变量。只要调用一次函数 xhsTest()
,就会定义这个变量,并且可以在函数外部访问到。
虽然可以通过省略 var 操作符定义全局变量,但不推荐这么做。在局部作用域中定义的全局变量很难维护,也会造成困惑。
如果需要定义多个变量,可以在一条语句中用逗号分隔每个变量(及可选的初始化):
var xhsRookies = ‘hi’,
xhsFound = false,
xhsNumber = 29
这里定义并初始化了 3 个变量。
2. var 声明提升
使用 var
时,下面的代码不会报错。这是因为使用这个关键字声明的变量会自动提升到块作用域 5 顶部:
{
console.log(xhsNumber) // undefined
var xhsNumber = 26
}
之所以不会报错,是因为 ECMAScript 运行时把它看成等价于如下代码:
{
var xhsNumber
console.log(xhsNumber) // undefined
xhsNumber = 26
}
这就是所谓的“提升”(hoist),也就是把所有变量声明都拉到块作用域的顶部。
let 声明
let
跟 var
的作用差不多,但有着非常重要的区别。最明显的区别是,let
声明的范围是块作用域, 而var
声明的范围是函数作用域。
{
var xhsRookies = ‘xhs-rookies’
console.log(xhsRookies) // xhs-rookies
}
console.log(xhsRookies) // xhs-rookies
{
let xhsNumber = 26
console.log(xhsNumber) // 26
}
console.log(xhsNumber) // ReferenceError: xhsNumber 没有定义
在这里,xhsNumber
变量之所以不能在块作用域外部被引用,是因为它的作用域仅限于该块内部。块作用域是函数作用域的子集,因此适用于 var
的作用域限制同样也适用于let
。
let
也不允许同一个块作用域中出现冗余声明。这样会导致报错:
var xhsRookies
var xhsRookies
let xhsNumber
let xhsNumber // SyntaxError;标识符xhsNumber已经声明过了
当然,JavaScript 引擎会记录用于变量声明的标识符及其所在的块作用域,因此嵌套使用相同的标识符不会报错,而这是因为同一个块中没有重复声明:
var xhsRookies = ‘xhs-rookies’
console.log(xhsRookies) // ‘xhs-rookies’
{
var xhsRookies = ‘xhs-rookies-boy’
console.log(xhsRookies) // ‘xhs-rookies-boy’
}
let xhsNumber = 30
console.log(xhsNumber) // 30
{
let xhsNumber = 26
console.log(xhsNumber) // 26
}
对声明冗余报错不会因混用let
和 var
而受影响。这两个关键字声明的并不是不同类型的变量, 它们只是指出变量在相关作用域如何存在。
var xhsRookies
let xhsRookies // SyntaxError
let xhsNumber
var xhsNumber // SyntaxError
1. 全局声明
与var
关键字不同,使用 let
在全局作用域中声明的变量不会成为window
对象的属性(var
声明的变量则会)。
var xhsRookies = ‘xhsRookies’
console.log(window.xhsRookies) // ‘xhsRookies’
let xhsNumber = 26
console.log(window.xhsNumber) // undefined
不过,let
声明仍然是在全局作用域中发生的,相应变量会在页面的生命周期内存续。因此,为了 避免 SyntaxError
,必须确保页面不会重复声明同一个变量。
2. let 作用域
总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
JavaScript
性能
linux
前端资料汇总
前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
inux**
前端资料汇总
前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-9J6CKTIW-1713687144325)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!