JavaScript作用域&预解析

作用域

1.作用域概述

代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性且减少命名冲突。
js的作用域(es6)之前:全局作用域,局部作用域。

  • 全局作用域:整个script标签,或者是一个单独的js文件
  • 局部作用域(函数作用域):在函数内部就是局部作用域,即,这个代码的名字只在函数内部起效果和作用

2.变量的作用域

根据作用域的不同,变量分为全局变量和局部变量。

  • 全局变量:在全局作用域下的变量,在全局下都可以使用
    注意:如果在函数内部,没有声明,直接赋值的变量,也是全局变量(不建议使用!)
  • 局部变量:在局部作用域下的变量,在函数内部的变量就是局部变量
    注意:函数的形参也可以看做的局部变量

从执行效率来看,
(1)全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
(2)局部变量,当程序执行完毕就会销毁,比较节约内存资源

3.作用域链

内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构称为作用域链,就近原则。

// 案例1:结果是几?
function f1() {
    var num = 123;
    function f2() {
        console.log(num); // 结果是123。站在目标出发,一层一层往外查找。
    }
    f2();
}
var num = 456;
f1();

预解析

1.预解析

JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码时分为两步:预解析和代码执行。
js引擎运行js 分为两步:
(1)预解析,js引擎会把js里面所有的var还有function提升到当前作用域的最前面
(2)代码执行,按照代码书写的顺序从上往下执行

预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作

2.变量预解析和函数预解析

3.预解析案例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容