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一旦声明必须赋值,不能使用null占位。
- 2、声明后不能再修改
- 3、如果声明的是复合类型数据,可以修改其属性