面试问题

来源:10-6 webpack如何配置多入口

爱学习啦啦啦啦

2020-03-13

老师你好 我前几天面试阿里问了三个问题我没答出来 自己查了一些资料也觉得还是理解不够透彻
1.全局作用域下 window a = 1 和var a=1的区别联系
2.setinveal两次运行的时间小于设置的时间原理是什么,我知道settimeout是小于设置的时间,因为浏览器运行宏任务有4ms的延迟
3.let不能重复声明的原理
期待老师的回复!

写回答

5回答

双越

2020-03-13

第二题,setInterval 和 setTimeout 都是宏任务,小于设置时间的原理也应该都是一样的。细说原理的话,可以查一下 event loop 的执行过程。

0
1
爱学习啦啦啦啦
非常感谢!
2020-04-09
共1条回复

双越

2020-03-13

第一题,window.a = 1 和 var a = 1 的区别和联系。一个是给全局的对象 window 加一个属性,一个是定义个全局的对象。如果在一个函数中要获取自由变量 a 的话,根据作用域规则,会先去根据父级作用域,找不到则继续往上一级一级的查找(作用域链),最后找到全局作用域。如果全局作用域找不到,则去 window 下找属性。具体可以这么代码演示一下。

window.a = 1;
var a = 2;
window.b = 10;

function fn() {
    console.log(a); // 2
    console.log(b); // 10
}
fn();

不知道我表达清楚了没有~

3
5
笑着拍拍你的头
老师你代码写错了,应该是 window.a = 1; window.b = 10; function fn() { var a = 2; console.log(a); // 2 console.log(window.a); // 1 console.log(b); // 10 } fn();
2022-10-09
共5条回复

慕标1126092

2021-06-13

问题1 https://blog.csdn.net/qq_43670193/article/details/115604870

0
0

amazingsbc

2020-08-12

网上看到一篇文章中提到了第二个问题。https://www.365jz.com/article/24406

0
0

双越

2020-03-13

第三题,let 不能重复声明,这是 ES6 语法的规定,所以 JS 解释器在解析语法时,会检查的一个错误。其实 var 能重复声明,let 不能重复声明,这就是一个语法规定。然后解释器按照语法执行规则检查。

我们知道,在一个 JS 作用域(如函数)执行的时候,没声明一个变量,都会存入栈中。var 能重复声明,也就是每次声明都覆盖栈的内容为新内容。let 不能重复声明,也就是检查到栈里有这个变量,就不然覆盖了。

说白了,还是个规则。

0
0

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4664 学习 · 1644 问题

查看课程