var、let、const

1. var 声明的变量存在提升;

2. var没有块级作用域,let和const存在块级作用域;

3. var允许重复声明,let和const在同一作用域不允许重复声明;

4. var和let声明变量可以修改,const是常量不能改变。

var let const
函数作用域 块级作用域 块级作用域
变量提升 不存在变量提升 不存在变量提升
值可更改 值可更改 值不可更改

变量提升

  • 提升是指无论 var 出现在一个作用域的哪个位置,这个声明都属于当前的整个作用域,在其中到处都可以访问到。
  • 只有变量声明才会提升,对变量赋值并不会提升。
console.log(a);//undefined
var a = 1;
  • 而如果对未声明过的变量进行操作,就会报错
    
console.log(b);
//假设b未声明过,Uncaught ReferenceError: b is not defined

练习1

变量i是全局的,函数执行时输出的都是全局作用域下的值。

		var arr = [];

		for (var i = 0; i < 2; i++) {
			arr[i] = function () {
				console.log(i);
			}
		}

		arr[0]();//2
		arr[1]();//2

练习2

每次循环都会产生一个跨级作用域每个会计作用域中的变量都是不同的;

函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的值。

let arr = [];

		for (let i = 0; i < 2; i++) {
			arr[i] = function () {
				console.log(i);
			}
		}

		arr[0]();//0
		arr[1]();//1

你可能感兴趣的:(JavaScript,javascript,前端)