zoukankan      html  css  js  c++  java
  • 送你 43 道 JS 面试题(站在巨人的肩膀上)

    送你 43 道 JS 面试题


     1、下面代码的输出是什么?

    function sayHi() {
      console.log(name);
      console.log(age);
      var name = "Lydia";
      let age = 21;
    }
    
    sayHi();
    • A: Lydia 和 undefined

    • B: Lydia 和 ReferenceError

    • C: ReferenceError 和 21

    • D: undefined 和 ReferenceError


    答案:D

    • 在函数中,我们首先使用var关键字声明了name变量。 这意味着变量在创建阶段会被提升JavaScript会在创建变量创建阶段为其分配内存空间),默认值为undefined,直到我们实际执行到使用该变量的行。 我们还没有为name变量赋值,所以它仍然保持undefined的值。

    实际变量提升的代码执行顺序

    function sayHi() {
      var name
      console.log(name);
      name = "Lydia";
    }
    
    sayHi();
    • 使用let关键字(和const)声明的变量也会存在变量提升,但与var不同,初始化没有被提升。 在我们声明(初始化)它们之前,它们是不可访问的。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量时,JavaScript会抛出一个ReferenceError

    关于let的是否存在变量提升,我们何以用下面的例子来验证:

    let name = 'ConardLi'
    {
      console.log(name) // Uncaught ReferenceError: name is not defined
      let name = 'code秘密花园'
    }

    let变量如果不存在变量提升,console.log(name)就会输出ConardLi,结果却抛出了ReferenceError,那么这很好的说明了,let也存在变量提升,但是它存在一个“暂时死区”,在变量未初始化或赋值前不允许访问。

    • 变量的赋值可以分为三个阶段:
      • 创建变量,在内存中开辟空间
      • 初始化变量,将变量初始化为undefined
      • 真正赋值
    • 关于letvarfunction
      • let 的「创建」过程被提升了,但是初始化没有提升。
      • var 的「创建」和「初始化」都被提升了。

      • function 的「创建」「初始化」和「赋值」都被提升了。

    2. 下面代码的输出是什么? 

    for (var i = 0; i < 3; i++) {
      setTimeout(() => console.log(i), 1);
    }
    
    for (let i = 0; i < 3; i++) {
      setTimeout(() => console.log(i), 1);
    }
    • A: 0 1 2 and 0 1 2

    • B: 0 1 2 and 3 3 3

    • C: 3 3 3 and 0 1 2


    答案:C

    • 由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。 由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。 因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3
    • 在第二个循环中,使用let关键字声明变量i:使用let(和const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)。 在每次迭代期间,i将被创建为一个新值,并且每个值都会存在于循环内的块级作用域。

     

  • 相关阅读:
    bat 批处理编写
    dos 命令
    反射
    反爬机制和破解方法汇总
    pandas
    谷歌历史浏览器下载
    python-----pip安装源选择(亲测有效)
    deepin 20.1 系统未安装pip
    python自带库-----os.path
    python 自带库---os库
  • 原文地址:https://www.cnblogs.com/meiyanstar/p/13968186.html
Copyright © 2011-2022 走看看