先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
在以下代码段中:
`// ES2015 env
{
function hello() {
return ‘Hello!’;
}
}
hello(); // ???
`
调用 hello()
会怎样?(代码段在 ES2015 环境中执行)
答案
因为代码块为函数声明创建了作用域,所以在 ES2015 环境中调用 hello()
会引发 ReferenceError: hello is not defined
。
有趣的是,在 ES2015 之前的环境中,在执行上述代码段时不会抛出错误。你知道为什么吗?请在下面的评论中写下你的答案!
3. 你可以在哪里导入模块?
你可以在代码块中导入模块吗?
`if (true) {
import { myFunc } from ‘myModule’; // ???
myFunc();
}
`
答案
上面的脚本将触发错误:'import' and 'export' may only appear at the top-level
。
你只能在模块文件的最顶级作用域(也称为模块作用域)中导入模块。
修复
始终从模块作用域导入模块。另外一个好的做法是将 import
语句放在源文件的开头:
`import { myFunc } from ‘myModule’;
if (true) {
myFunc();
}
`
ES2015 的模块系统是静态的。通过分析 JavaScript 源代码而不是执行代码来确定模块的依赖关系。所以在代码块或函数中不能包含 import
语句,因为它们是在运行时执行的。
4. 函数参数作用域
思考以下函数:
`let p = 1;
function myFunc(p = p + 1) {
return p;
}
myFunc(); // ???
`
调用 myFunc()
会发生什么?
答案
当调用函数 myFunc()
时,将会引发错误:ReferenceError: Cannot access 'p' before initialization
。
发生这种情况是因为函数的参数具有自己的作用域(与函数作用域分开)。参数 p = p + 1
等效于 let p = p + 1
。
让我们仔细看看 p = p + 1
。
首先,定义变量 p
。然后 JavaScript 尝试评估默认值表达式 p + 1
,但此时绑定 p
已经创建但尚未初始化(不能访问外部作用域的变量 let p = 1
)。因此抛出一个错误,即在初始化之前访问了 p
。
修复
为了解决这个问题,你可以重命名变量 let p = 1
,也可以重命名功能参数 p = p + 1
。
让我们选择重命名函数参数:
`let p = 1;
function myFunc(q = p + 1) {
return q;
}
myFunc(); // => 2
`
函数参数从 p
重命名为 q
。当调用 myFunc()
时,未指定参数,因此将参数 q
初始化为默认值 p + 1
。为了评估 p +1
,访问外部作用域的变量 p
:p +1 = 1 + 1 = 2
。
5. 函数声明与类声明
以下代码在代码块内定义了一个函数和一个类:
`if (true) {
function greet() {
// function body
}
class Greeter {
// class body
}
}
greet(); // ???
new Greeter(); // ???
`
是否可以在块作用域之外访问 greet
和 Greeter
?(考虑 ES2015 环境)
答案
function
和 class
声明都是块作用域的。所以在代码块作用域外调用函数 greet()
和构造函数 new Greeter()
就会抛出 ReferenceError
。
6. 总结
必须注意 var
变量,因为它们是函数作用域的,即使是在代码块中定义的。
由于 ES2015 模块系统是静态的,因此你必须在模块作用域内使用 import
语法(以及 export
)。
函数参数具有其作用域。设置默认参数值时,请确保默认表达式内的变量已经用值初始化。
在 ES2015 运行时环境中,函数和类声明是块作用域的。但是在 ES2015 之前的环境中,函数声明仅在函数作用域内。
希望这些陷阱能够帮你巩固作用域知识!
作为前端开发,JS是重中之重,最近结束了面试的高峰期,基本上offer也定下来了就等开奖,趁着这个时间总结下91道JavaScript面试题,这些都是高频面试题,希望对你能有所帮助。
一、原型链
1.1,创建对象有几种方法?
1.2,instanceof的原理?
二、类
2.1,类的声明?
2.2,生成实例?/ 声明一个类,怎么生成类的实例?
三、继承
3.1,call、apply的共同点与区别?
3.2,用javascript实现对象的继承/ 继承的几种方式,这几种方式的优缺点?
四、作用域
4.1,说说你对作用域链的理解?
4.2,this?
4.3,请说出下列的值?
五、javaScripti闭包
5.1,闭包的特征?
5.2,闭包应用场景?
5.3,实际开发中闭包的应用?
5.4,请说出下列的值?
六、js运行机制/ 单线程/ 异步
6.1,如何理解js的单线程?
6.2,js为什么是单线程的?
6.3,同步和异步的区别是什么?分别举一个同步和异步的例子?
6.4,何时需要异步?
6.5,什么是任务队列?
6.6,请说出下列值?
6.7,栈和队列的区别?
6.8,栈和堆的区别?
6.9,什么是event loop?
6.10,event-loop流程?
6.11,哪些语句会放入异步任务队列中?
6.12,何时被放入任务队列?
七、js数据类型
7.1,js使用typeof能得到的哪些类型?
7.2,如何准确判断一个变量是数组类型?
7.3,js变量按照存储方式区分为哪些类型,并描述其特点?
7.4,null和undefined的区别?
7.5,undefined的典型用法?
7.6,null的典型用法?
7.7,chrome60+浏览器中,a===b的是哪项?
八、js中的内置函数/内置对象
8.1,js中有哪些内置函数/ 数据封装类对象?
8.2,js中有哪些内置对象?
前端框架
前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
以 Vue 为例,我整理了如下的面试题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
以 Vue 为例,我整理了如下的面试题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-zoLhaFeO-1713103991314)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!