ECMAScript-作用域

一、ECMAScript-作用域
1. 什么是作用域

引用维基百科定义:在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。

也就是说:就是管理变量的存储和如何读取制定的规则。

通俗的讲就是:定义变量的适用范围。

2. 常见的作用域分类
对象类型
self/global/window/globalThis全局作用域
function函数作用域(局部作用域)
{}块状作用域
this动态作用域
  • 全局作用域

    通俗的讲就是全局都可以访问

    比如下面的定义:

    var a = 'zhangsan'
    
    // 函数外可调用a变量
    function test(){
        // 函数内可调用a变量
    }
    

    下面由于js的变量提升的原因,在self/global/window/globalThis这些对象上的属性也是全局作用域。

    // 比如函数体的a变量
    // 其实是window下的一个属性,也拥有全局作用域的特性,但是极其不推荐使用。
    function test(){
        a = 'zhangsan'
    }
    
  • 函数作用域

    在函数内部定义的变量属于局部作用域。只存在函数内部访问,对外是封闭的,从外层的作用域无法直接访问函数内部的作用域。

    function test(){
        var a = 'zhangsan'
    }
    console.log(a) // ReferenceError: a is not defined
    
    // 如果想访问
    // 方式一:return
    function test(){
        var a = 'zhangsan'
        return a
    }
    console.log(test())
    
    // 方式二:闭包的方式
    function test(){
        var a = 'zhangsan'
        function result(){
            return a
        }
        return result()
    }
    console.log(test())
    
  • 块状作用域

    // js中没有块状作用域的概念
    // es中依赖let/const定义的变量,存在这个概念
    if (true){
      let a = 2
      console.log(a)
    }
    
  • 动态作用域,主要针对的是this

    window.b = 3
    
    function test() {
        console.log(this.b)
    }
    
    test.bind({
        b: 4
    })() // 4
    test() // 3
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值