JavaScript代码的运行机制
程序员文章站
2024-03-24 23:10:10
...
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
的作用域,栈内存 另外一个功能是保存基本数据类型
上一篇: Android蓝牙4.0扫描
下一篇: std库学习①:transform
推荐阅读
-
JavaScript的变量的彻底理解
-
VS2017中调用gdal(C#版)的方法二(含gdal下载地址,配置过程,代码测试,超详细!!)
-
JavaScript代码的运行机制
-
面试官:请手写一段必然死锁的代码
-
Spring源代码解析(十):Spring Acegi框架授权的实现 博客分类: Spring框架 spring
-
使用JavaScript将当前页面保存成PDF,支持图片和文字的保存 JavaJavaScriptpdfes6
-
Spring源代码解析(十):Spring Acegi框架授权的实现 博客分类: Spring框架 spring
-
Spring源代码解析(九):Spring Acegi框架鉴权的实现 博客分类: Spring框架 spring
-
当心下面例子的循环:闭包中的局部变量可能和你最初想的不一样。 博客分类: js闭包问题 javascript闭包问题循环
-
2020阿里最新出品的泰山版Java开发手册,告别垃圾代码