备战校招,小冯开始刷前端面试题 JS基础

322 阅读1分钟
var b = 10;
(function b(){
    b = 20;
    console.log(b); 
})();

  本题输出什么?以及为什么?

本题考点应该在 变量和函数之间的关系

输出 f b() {
b = 20;
console.log(b);
}

打印了这个声明的函数 如果没有function b 倘若是一个匿名函数  就直接打印20 

本函数写在自调用函数里面 ,所以打印这个函数 并没有打印外面的值

var、let 和 const 区别的实现原理是什么

一、var声明的变量会挂载在window上,而let和const声明的变量不会

二、var声明变量存在变量提升,let和const不存在变量提升,而是直接报错

三、let和const声明形成块作用域,而var不存在此作用域

四、同一作用域下let和const不能声明同名变量,否则报错 而var可以只是改变指向

五、let、const存在暂存死区

所谓暂存死区

暂存死区-Temporal Dead Zone-TDZ

随着let和const的引入,也引入了暂存死区的概念。使用var的时候,作用域内(函数作用域),在还没使用var声明一个变量的时候,访问该变量,将会获得undefined。但是如果使用let,作用域(块级作用域)内,在还没使用let声明一个变量的时候,访问该变量,将会获得ReferenceError,从作用域开始到let语句之间,就是暂存死区。

{
console.log(a) // Uncaught ReferenceError: a is not defined
console.log(b) // Uncaught ReferenceError: b is not defined
console.log(c) // undefined
// 暂存死区
let a =1
const b=2
var c=3
}

const  

  1. 1一旦声明必须赋值,不能使用null占位。 
  2.  2、声明后不能再修改
  3.  3、如果声明的是复合类型数据,可以修改其属性