面试中关于JavaScript作用域的5个坑(1),2024年最新腾讯3轮面试都问了前端事件分发

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

`

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,访问外部作用域的变量 pp +1 = 1 + 1 = 2

5. 函数声明与类声明

以下代码在代码块内定义了一个函数和一个类:

`if (true) {

function greet() {

// function body

}

class Greeter {

// class body

}

}

greet();       // ???

new Greeter(); // ???

`

是否可以在块作用域之外访问 greetGreeter?(考虑 ES2015 环境)

答案

functionclass 声明都是块作用域的。所以在代码块作用域外调用函数 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中有哪些内置对象?

8.3,js变量按照存储方式区分为哪些类型,并描述其特点?

8.4,数组方法/ Array对象方法?

8.5,数组API?

8.6,对象API?

九、数组去重

9.1,数组怎么去重?(方法)

9.2,对上述数组去重方法速度比较?(性能)

9.3,一句话数组去重?

9.4,保留数组中非重复元素?

9.5,保留数组中重复元素?

十、js逻辑判断

10.1,请写出下面的答案?

十一、内存泄漏

11.1,哪些操作会造成内存泄漏?

11.2,js内存泄漏的解决方式

十二、dom

12.1,dom是哪种基本的数据结构?

12.2,dom操作的常用api有哪些?

12.3,dom节点的attribute和property有何区别?

12.4,dom结构操作/ 怎样添加、移除、移动、复制、创建和查找节点/ dom操作的常用api?

12.5,dom事件的级别?

12.6,dom事件模型?

12.7,dom事件流?

12.8,描述dom事件捕获的具体流程?

12.9,event对象的常见应用?

12.10,自定义事件/ 模拟事件?

12.11,通用事件绑定/ 编写一个通用的事件监听函数?

十三、bom

13.1,bom常用属性?

十四、通信

14.1,什么是同源策略及限制?

14.2,前后端如何通信?

14.3,跨域通信的几种方式?

14.4,jsonp实现?

14.5可以跨域的三个标签?

14.6,三个可跨域的标签的使用场景?

十五、ajax

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

篇幅有限,仅展示部分截图:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
e636a356a01389cd2de0211d347.png)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-YOeu2mrw-1713103961823)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值