JavaScript代码的运行机制

1、变量提升

js 代码执行之前,会对所有声明的变量进行提前

var 声明的变量 => 提前声明,不赋值

console.log(num); // undefined 
// 代码执行到这里时,num 只是经过了变量提升,但是没有完成赋值,所以是 undefined;
​
var num = 100; // 代码执行过这一行后完成了赋值,所以 num 是100
console.log(num);  // 100

function 声明的变量 => 提前声明,并且赋值

console.log(fe); // 函数体本身
//因为 fe 这个变量在函数执行时就已经赋值完成了,所以无论在函数声明前还是后使用都是函数本身
​
fe(); // 因为 fe 在变量提升阶段就已经完成了赋值,所以 fe 是一个函数,所以可以成功执行
​
function fe() {
    console.log('We are Front-end Engineer');
}

2、判断变量类型

1)、如果遇到基本数据类型,就在作用域中存储该基本数据类型;

2)、如果遇到引用数据类型,则浏览器会再次分配一个堆内存,然后把引用数据类型的内容存储到堆内存中,接下来再把这个堆内存的地址赋值给变量(此时这个地址是存储在作用域内存中的);

3)、如果遇到函数执行时,会经历以下几步:

  • 浏览器开辟一个私有作用域;

  • 形参赋值,把执行时的实参赋值给函数形参变量;

  • 私有作用域中变量提升

  • 函数代码从上到下执行

ps:

js 运行的环境是浏览器开辟的栈内存

栈内存js的作用域,栈内存 另外一个功能是保存基本数据类型

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值