首页 > 其他分享 >前端面试题每日3题——2022/08/30

前端面试题每日3题——2022/08/30

时间:2022-08-31 14:47:57浏览次数:50  
标签:面试题 console log 作用域 30 window 2022 var 变量

1 以下代码执行后,控制台中的输出内容为?

for (let i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i);
  });
}

for (var j = 0; j < 3; j++) {
  setTimeout(() => {
    console.log(j);
  });
}

2 以下代码执行后,控制台中的输出内容为?

if (!("a" in window)) {
  var a = 1;
}

if (!("b" in window)) {
  let b = 1;
}
console.log(window);
console.log(a);
console.log(b);

3 以下代码执行后,控制台中的输出内容为?

function fn() {
  var i = 0;
  return function () {
    console.log(i++);
  };
}
var f1 = fn();
var f2 = fn();
f1();
f1();
f2();

1、答案:0 1 2 3 3 3

解析:var 声明的变量没有块级作用域,在 for 循环中使用 var 声明迭代变量 j 会导致所有 setTimeout 中使用的 j 指向同一个变量,而 setTimeout 属于宏任务,执行的时机在正常任务队列之后,即此处 for 循环退出之后开始执行,此时迭代变量保存的是导致循环退出的值 3,因此所有 setTimeout 的回调函数都会输出 3

而 let 声明迭代变量时,JS 引擎会为每个迭代循环声明一个新的迭代变量,每个 setTimeout 引用的都是不同的变量实例,所以最后输出 0 1 2

2、答案:undefined 报错:Uncaught ReferenceError: b is not defined

var 声明的变量没有块级作用域,并且存在变量提升,因此该题代码等价于:

var a;
if (!("a" in window)) {
  a = 1;
}

此时 a 为全局变量,而由 var 声明的全局变量会成为 window 的属性,因此 if 语句块中的代码不会执行,所以 console.log(a) 输出 undefined

而 let 声明的变量存在块级作用域的概念,所以 let b 不会成为全局变量,即使其成为全局变量,也不会成为 window 的属性,因为 let 声明的全局变量不会成为 window 的属性,所以在 console.log(b) 所在的作用域(全局)中,未声明变量 b,因此会报错:Uncaught ReferenceError: b is not defined

3、答案:0 1 0

var 声明的变量不存在块级作用域,但是存在局部作用域,此题中变量 i 的作用域为 fn 函数作用域

每次调用fn都会形成一个闭包,不同闭包之间是独立的不会互相干扰

闭包会将 i 的值保存下来,多次调用 fn() 返回的函数会修改 i 的值

所以最终会输出:0 1 0

公众号【今天也要写bug】

标签:面试题,console,log,作用域,30,window,2022,var,变量
From: https://www.cnblogs.com/bidong/p/16643012.html

相关文章

  • JAVA面试题总结归纳
    问题一:JAVA的原始数据类型有哪些,它们的大小以及其对应的封装类是什么?数据类型对应大小对应的封装类boolean1bit,boolean类型单独使用是4个字节,而在数组中又是1个......
  • 2022-8-31 每日一题-栈模拟-剑指offer-二分查找
    946.验证栈序列难度中等303收藏分享切换为英文接收动态反馈给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入......
  • C20220801T2 marisa
    考场上写挂这一道题,白给。(数组开小+随机化次数太少)没想到评测机这么给力,直接随机化\(2\times10^5\)个点,只要有一个在所有带状区域之外就没有覆盖,否则可以视为覆盖,这里......
  • C20220805T3 零和
    当构造出长度为22的随机\([1,5]\)的集合后,出现合法方案的概率很大,所以可以先随便构造一种方案,然后再通过背包求出其他取值中可以满足的方案数(即先构造22个极小的整数,去找......
  • C20220805T2 赌徒
    设手中硬币的大小为\(a\)和\(b\),对手硬币的两面是\(a_i\)和\(b_i\),那么单次游戏的收益就是\[\frac{1}{4}x_i(f(a,a_i)+f(a,b_i)+f(b,a_i)+f(b,b_i))\]其中\(f(x......
  • C20220806T1 暴力计算
    给定一张图,按照边权走,求总边权达到\(M\)时用的最短长度。\(n\leq100,M\leq10^{18}\)。首先可以用\(dp[i][j][k]\)表示从\(i\)出发通过\(2^k\)步走到\(j\)......
  • C20220806T3 如何愉快地与方格玩耍
    给定\(n\timesn\)的黑白方格,期初所有颜色均为白色,支持以下操作翻转\([l,r]\)行/列的颜色翻转质数/合数行/列的颜色求\([l1,r1]\)行、\([l2,r2]\)列围成的区......
  • C20220806T2 枚举计算
    有\(n\)个点,求从1号点到\(n\)号点的最短路径,但有某些点有前驱,必须先到了前驱才能到达这个点,允许有多个点同时出发。\(n\leq3000,m\leq30000\)。一看,这不是最短路......
  • C20220725T2 运动
    给定序列\(s\),求满足\(max\{s_{i,j}\}-min\{s_{i,j}\}\leqk\)的最大长度\(j-i\)。\(n\leq3\times10^6\)。(时限3s)没想到\(O(n\,log\,n)\)没有被卡掉。首先判......
  • C20220725T3 回文
    给定字符串\(s\),求\(s_{l,r}\)中回文串个数。多组询问,\(|s|\leq5000\),\(T\leq10^5\)。首先介绍\(O(n\timesT)\)的离谱做法(竟然没卡掉),先跑\(Manachar\),然......