作用域(scope)

含义

        作用域(scope) 是指变量的可访问性

作用域的种类

        分为静态作用域(词法作用域)和动态作用域

        静态作用域(词法作用域)

        是指在词法分析阶段就确定了,不会改变。变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域。

        动态作用域

        是在运行时根据程序的流程信息来动态确定的,而不是在写代码时进行静态确定的。 动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心它们在何处调用。

执行顺序

        如果一个文档流中包含多个script代码段(用script标签分隔的js代码或引入的js文件),它们的运行顺序是:

  1. 读入第一个代码段(js执行引擎并非一行一行地分析程序,而是一段一段地分析执行的)
  2. 做词法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤5
  3. 对var变量和function定义做“预解析“(永远不会报错的,因为只解析正确的声明)
  4. 执行代码段,有错则报错(比如变量未定义)
  5. 如果还有下一个代码段,则读入下一个代码段,重复步骤2
  6. 完成

es next 新增的变量声明

        let命令,const命令,class命令声明的全局变量,不属于顶层的属性

        全局作用域中,用let和const声明的全局变量并没有在全局对象中,只是在一个块级作用域(Script)中

this关键字

       this的值在函数被调用的时候确定,而不是在定义函数的时候。

       this关键字的指向取决于函数调用的位置和方式。

  • 全局作用域或函数外部:this指向全局对象(在浏览器环境中是window对象)
  • 函数内部:取决于函数调用的方式
    • 作为普通函数调用:this指向全局对象。(默认绑定)
    • 作为对象的方法调用:this指向该对象。(隐式绑定)
    • 作为构造函数调用:this指向新创建的对象实例。(作为构造函数调用)
    • 使用call()apply()bind()方法调用:this被显式地设置为这些方法的第一个参数。(显式绑定)

作用域和this的关系

        作用域和this的关系,又可以说是作用域(scope)和上下文(context)

        作用域(scope) 是指变量的可访问性

        上下文(context)是指this在同一作用域内的值,this 永远指向最后调用它的那个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值