08.JavaScript-作用域和预解析

目录

前言

一、什么是作用域

二、作用域目的是什么?

三、全局作用域和局部作用域区别

四、什么是变量作用域?

1. 全局变量:

2.局部变量:

五、块级作用域:es6新增 

六、作用域链

七、预解析


前言

今天分享的作用域相关是es6之前的js作用域分为:全局作用域和局部作用域

一、什么是作用域

作用域:代码名字(某个变量)在某个范围内起作用和效果

二、作用域目的是什么?

目的:为了提高程序的可靠性,减少命名冲突

三、全局作用域和局部作用域区别

全局作用域:script标签中、或者是一个单独的js文件

局部作用域:指的是代码名字只在函数内部起效果和作用

四、什么是变量作用域?

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

1. 全局变量:

1、全局作用域下直接声明的变量

2、在函数内部没有声明直接赋值的变量

2.局部变量:

1、函数内部的变量就是局部变量

1、函数的形参也可以看作是局部变量

注意区别:

全局变量只有在浏览器关闭的时候才会销毁,比较占内存

局部变量当程序执行完毕后就会销毁,比较节约内存。


五、块级作用域:es6新增 

比如:{}  if{}  for {}


六、作用域链

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

var num = 10;

function fn() {  // 外部函数

        var num = 20;

        function fum() {  // 内部函数

              console.log(num); //20

         }

        fum();

}

fn();


七、预解析

js代码是由浏览器中的js解析器(js引擎)来执行的,js引擎在运行js代码的时候分为两步:预解析和代码执行

预解析:js引擎会把js里所有的var 和 function 提升到当前作用域的最前面

代码执行:从上往下依次执行

预解析分为:变量预解析(变量提升)和函数预解析(函数提升)

变量提升:把所有变量提升到当前作用域的最前面,但不提升赋值操作

函数提升:把所有函数提升到当前作用域的最前面,但不提升函数调用

案例1

        var num = 10;

        fun();

        function fun() {

            console.log(num);

            var num = 20;

        }

        // 相当于执行了以下代码

        var num;

        function fun() {

            var num;

            console.log(num); // undefined

            num = 20;

        }

        num = 10;

        fun();

2、案例2

        f1();

        console.log(c);

        console.log(b);

        console.log(a);

        function f1() {

            var a = b = c = 9; //相当于 var a = 9;b=9;c=9   而集体声明:var a = 9,b=9,c=9

            console.log(a);

            console.log(b);

            console.log(c);

        }

        //相当于执行了以下代码

        function f1() {

            var a;

            a = 9;

            b = 9; // 函数里面的变量直接负责,没有定义则被看作是全局变量

            c = 9;

            console.log(a); //9

            console.log(b); //9

            console.log(c); //9

        }

        f1();

        console.log(c); //9

        console.log(b); //9

        console.log(a); // a is not defined 报错

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_LiuP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值