js变量提升

本文详细解释了JavaScript中的变量提升现象,通过实例展示了变量声明如何被提升到作用域顶部,以及它如何影响代码执行。同时,文章讨论了变量提升与函数声明的区别,并通过示例说明了块级作用域和函数作用域下的变量提升行为,揭示了在不同场景下可能出现的意外结果。最后,提供了一道经典面试题加深理解。
摘要由CSDN通过智能技术生成

1.什么是变量提升?

在变量的作用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。(注意,变量提升只将声明部分提升,赋值部分不改变位置,具体可以看例子理解)

2.举个例子

function test() {
    a=1;
    b=2;
    c=3
    var a,b,c;
    console.log(a);
    console.log(b);
    console.log(c);
}
test();

// 输出 1 2 3

为什么我先赋值后声明,没报错还正确输出了呢?这就是按照变量提升的原则,把变量声明提升到了最顶部,在代码执行前,js编译器会将代码改成这样:

function test() {
    var a,b,c;
    a=1;
    b=2;
    c=3
    console.log(a);
    console.log(b);
    console.log(c);
}
test();

3.再举个例子

 var value="1";
    function test() {
    console.log(value);
    var value="2";
    }
    test();
// 输出 undefined

为什么输出undefined,而不是var声明的全局变量value呢?因为变量提升,把声明提到最顶部,所以js在执行这段代码时是这样的:

var value="1";  
function test() {
var value;
console.log(value);
value="2";
    
}
test();

4.再来一个经典面试题

console.log(value);
var value= 1;
function test() {
    console.log(value);
    var v1 = 2;
    console.log(value);
}
test();
console.log(value);

//答案是.........

//undefined
//undefined
//2
//1


小结
我们习惯将var a = 2;看做是一个声明,而实际上javascript引擎并不这么认为。它将var a和a = 2看做是两个单独的声明,第一个是编译阶段的任务,而第二个则是执行阶段的任务。

这意味着无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理,可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最顶端,这个过程被称为提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值