JavaScript之变量、变量提升

JavaScript之变量、变量提升

变量提升

JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)

变量的概念

在JavaScript中 变量是用来存储数据值的容器。

在JavaScript中声明变量的方式

1、var 声明变量

var a=1;

特点:
1、具有变量提升

console.log(a);  //undefined
var a=1;

2、不具有块级作用域

for(var i=0;i<6;i++){
    console.log(i); //0 1 2 3 4 5
}
    console.log(i); //6

3、声明的变量可重新赋值

var a=1;
a=2;
console.log(a);  //2

4、声明过的变量可重复声明

var a=1;
var a=2;
console.log(a);  //2

2、let 声明变量(es6)

let a=1;

特点:
1、不具有变量提升

console.log(a);  // Cannot access 'a' before initialization
let a=1;

2、具有块级作用域

for(let i=0;i<6;i++){
    console.log(i); //0 1 2 3 4 5
}
    console.log(i); //i is not defined

3、声明的变量可重新赋值

let a=1;
a=2;
console.log(a);  //2

4、声明过的变量不可重复声明

let a=1;
let a=2;
console.log(a);  //Identifier 'a' has already been declared

3、const 声明常量(es6)

const a=1;

1、不具有常量提升

console.log(a);  // Cannot access 'a' before initialization
const a=1;

2、具有块级作用域

if (true) {
   const a = 1;
   console.log(a); //1
}
   console.log(a); //a is not defined

3、声明的常量不可重新赋值

const a=1;
a=2;
console.log(a);  //Assignment to constant variable

注意:如果const声明的是数组,可通过index(下标)来改变它的值

const a = [1,2,3,4,5,6];
a[0]=a[a.length-1];
console.log(a);  // [6, 2, 3, 4, 5, 6]

4、声明过的常量不可重复声明

const a=1;
const a=2;
console.log(a);  //Identifier 'a' has already been declared

总结
var、let、const在JavaScript中都可用来声明变量或者常量。
var、let用来声明变量,赋值之后可重新赋值,const用来声明常量,赋值之后不可重新赋值。var不具有块级作用域,声明过的变量可再次声明(被覆盖),存在变量提升;let、const具有块级作用域,声明过的变量不可再次声明,不存在变量提升。

函数提升

js里的function也可看做变量,与普通变量一样,也存在变量提升情况

var fn=1;
function fn(){
   var a=1;
   console.log(a);
}
   console.log(fn);//1
var fn
function fn(){
 var a=1;
 console.log(a);
}
 console.log(fn);//ƒ fn(){var a=1;console.log(a); }

函数和var声明的变量都存在变量提升,相同的变量会被覆盖。并且函数提升的优先级高于变量提升。
注意
函数的定义才会被提升,表达式不会被提升。
函数的定义

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

函数表达式

var fn=function(){
 var a=1;
 console.log(a);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值