js声明提升

js声明提升

变量声明提升:

var声明的变量会提升,在定义语句之前就可以访问,初始化值不会提升

var a = 2
function fn() {
	console.log(a)
	var a = 1
}

以上代码输出值为undefined,相当于以下代码

var a = 2
function fn() {
	var a	// 屏蔽了外部的变量a,同时自身未被赋值
	console.log(a)
	a = 1
}

let声明的变量是否会提升?
let声明和var用法一样,let声明的变量只在当前作用域中有效。由以下案例可以看出,let也存在变量提升,但与var赋予的初始值不同,在编译阶段对var定义的变量初始化为undefined,而let定义的变量仍然处于未初始化状态。也就是报错ReferenceError
从代码块(block)起始到变量求值(包括赋值)以前的这块区域,称为该变量的暂时性死区。

var a = 2
function fn() {
	console.log(a)   //2
}
var a = 2
function fn() {
    //暂时性死区开始
	console.log(a)   //ReferenceError
	//暂时性死区结束
	let a = 1
}

const声明的变量不可修改,如果是对象,则可修改对象的属性,不可修改该对象
var let const 还有一个区别是var声明的变量会挂载到window对象,let和const则不会

函数声明提升:
函数的创建方式有两种:函数声明和函数表达式

函数声明会
函数声明提升优先于变量提升,函数声明会被变量赋值影响,但不会被变量声明影响,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值