JavaScript变量提升机制

JavaScript变量提升机制

Js代码执行前(栈内存)还做了一件事那就是变量提升,Js会在所有var function等关键字的提前声明或者定义。、
看以下的代码:

console.log(a); //undefined
var x = 5;

变量a虽然是在console.log后面定义的,但是使用var申明的a会提前保存在内存中,并赋值undefined ,然后再从上往下执行js语句 。它的执行顺序类似于下面的结构:

var x;
console.log(x); //undefined
x = 5;

先声明了a,a没有定义赋值为undefined ,输出的结果自然为undefined 然后再给a赋值为5。

再看以下代码:

console.log(x); //error: x is not defined
x = 5;

变量提升阶段 var 只声明未定义

变量提升前先赋值 然后执行代码

而带function的声明和赋值都完成了,看如下的代码:

console.log(f);
function f() {console.log("xx")}

声明函数会把整个函数都提升到最前面 ,所以浏览器中结果会输出整个函数,结果如下:

function f() {
console.log("xx");
}

函数的参数也可以理解为函数作用域的变量 ,如下:

var x = 5;
function f() {console.log(x); //undefined var x = 2;}
f();

以上虽然全局作用域声明了一个变量x ,但是函数里面也声明了一个变量x ,所以会先查找函数里面是否有变量x,如果有的话就不会再全局下查找了。
类似于如下结构:

var x = 5;
function f() { var x console.log(x); //undefined x = 2; }
f();

但注意:变量提升只发生在当前作用域

全局作用域声明的是全局变量

私有作用域声明的变量是“私有变量”

执行到函数时因为变量提升已经赋值和定义 直接执行=>形成私有作用域 变量提升

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值