JavaScript基础

2022.3.22 学习笔记

目录

三、JavaScript作用域

3.1 作用域

3.1.1 作用域概述

3.2 变量的作用域

3.2.1 变量作用域的分类

3.3 作用域链

四、JavaScript预解析

4.1 预解析

4.2 变量预解析和函数预解析

4.3 预解析案例


三、JavaScript作用域

3.1 作用域

3.1.1 作用域概述

通常来说,一段程序中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

全局作用域:整个scrip标签或者一个单独的js文件

局部作用域(函数作用域):在函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用

var num =10;

console.log(num);

function fn(){

     var num=20;

     console.log(num);

}

fn();

3.2 变量的作用域

3.2.1 变量作用域的分类

在JavaScript中,根据作用域的不同,变量可以分为全局变量和局部变量两种。

1.全局变量

在全局都可以使用;在全局作用域下var声明的变量是全局变量

2.局部变量

只能在函数内部使用;在函数内部var声明的变量是局部变量

注意:函数的形参实际上是局部变量在函数内部没有声明、直接赋值的变量属于全局变量。

3.从执行效率来看:

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

局部变量当其所在的代码块被执行时会被初始化;当代码块运行结束后才会销毁,比较节约内存资源。

3.3 作用域链

1.只要是代码,就至少有一个作用域;

2.写在函数内部的局部作用域;

3.如果函数中还有函数,那么这个作用域中就又可以诞生一个新的作用域;

4.根据在内部函数可以访问外部函数变量这种机制,用链式查找决定哪些数据可以被内部函数访问,就称作作用域链。(就近原则:站在目标出发,一层一层向外查找)

四、JavaScript预解析

4.1 预解析

JavaScript代码是由浏览器中的JavaScript解析器来执行的,JavaScript解析器在运行JavaScript代码的时候分为两步:预解析代码执行

预解析:JS引擎会把JS里面所有的var以及function声明提升到当前作用域的最前面

代码执行:按照代码书写的顺序从上往下执行

4.2 变量预解析和函数预解析

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

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

例1:console.log(num);

          var num=10;         // 输出undefined

上面这段代码相当于执行了一下代码:

var num;

console.log(num);

num=10;  // 所以输出了undefined

例2:fn();         //程序报错

         var fn = function () {

              console.log(10);

         }

上面这段代码相当于执行了一下代码:

var fn;

fn();

fn = function () {

     console.log(10);

} // 所以程序报错。因此函数表达式声明函数时,调用函数需要写在代码段之后

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

例3:fn();

         function fn() {

                 console.log(10);

         } //输出10

上面这段代码相当于执行了一下代码:

         function fn() {

                 console.log(10);

         }

        fn(); //输出10

4.3 预解析案例

案例1:结果为undefined

     

 案例2:结果为undefined,20

             

 案例3:结果为undefined,9

       

案例4: 结果为9,9,9,9,9,报错

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值