var let const 的区别

(let和const)与 var的区别

(1)var可以重复声明变量

var num = 100
var num = 200
console.log(num)
//打印出来200

let和const不能重复声明变量

let n=20
let n=30
console.log(n)
//浏览器报错 
Uncaught SyntaxError: Identifier 'n' has already been declared
const m=20
const m=30
console.log(m)
//浏览器报错 
//Uncaught SyntaxError: Identifier 'n' has already been declared

(2)下面我们再看一个例子

console.log(num)
var num = 100
console.log(num)
//结果是这样的 undefined 和 100

有人会说为啥呀?
我说一下我的理解,这是因为var的预解析(可以在赋值之前调用,只不过是 undefined)
而let和const声明的变量不进行预解析(就是在声明之前不能调用),我们看一下边的例子

console.log(num)
let num =100
//浏览器报错:不能在初始化之前读取,而不是报undefined
//const 也会这样报错

(3)var只被函数限制作用域

function fn(){
		var num = 100		
	}
	fn()
	console.log(num)
	//报错:Uncaught ReferenceError: num is not defined

如果是这样放在if里,可以得到结果因为if的大括号不限制num的作用域

if(true){
		var num = 100
	}
	console.log(num)
	//结果:100

注意好此时我们把if里的var换成let

 if(true){
		let num = 100
	}
	console.log(num)

结果就报错了num is not defined,这是为啥呢?因为let和const会生成块级作用域,大白话说就是会被任何一个{…}限制使用范围,所以知道怎么让上边的显示结果了吗,就是把 console.log(num) 放到if的条件里
(4)let和const的区别
①let可以在声明的时候不进行赋值,const必须赋值
②let声明的变量可以重新赋值,const一经赋值不能更改
那么我们来看个例子

const obj={
		name:'Jack'
	}
	obj.name='Dave'
	console.log(obj.name)

打印的是 Dave ,因为obj是地址,只要地址不变,对他进行任何操作都可以

这篇文章前边有个名词叫预解析,这里我来说一下什么是预解析,也可以叫他预解释
在代码执行之前进行解释,当代码开始执行的时候表示预解析结束。解析的是两个东西:①声明式函数function fn() {}②var关键字
预解析在做什么:
①把var声明的变量提前
②把声明式函数提前,会把函数名当做变量提前,并且告诉浏览器这个变量的存储的是一个函数地址
看个小例子

fn()//在这个函数执行之前,浏览器就知道了这个变量被定义过,并且代表的是函数地址,所以可以当函数执行
function fn(){}
fn()
//这段代码的真实执行顺序就是:
//function fn(){}
//fn()
//fn()

有不对的地方请大家评论指教✿✿ヽ(°▽°)ノ✿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值