JavaScript之作用域

作用域

全局变量

不应该在函数中var定义的,可以在整个项目中使用的

var abc = 1234 //全局变量
abcd = 2345 //全局(即windows)属性

结果

> abcd
< 1453
> delete window.abcd
< true
> delete window.abc
< false
> abcd
  VM608:1 Uncaught ReferenceError: abcd is not defined
    at <anonymous>:1:1

函数定义

function test(){
    var ab = 45
}
test() //其他地方可以看到ab的值


function test(){
    var a = 3
    return a+3
}
console.log(test()); //6
console.log(a) //undefind

块状作用域(ES6新特性)

在{}中的就是一个块

function test(){
    var a = 3
    function test2(){
        var b = 2
        return a+b //test2没找到a就向上找a
    }
    return test2 //给外界提供访问test2的口子
}

在ES6以前是没有块状作用域的概念,所以块内部的是不会被封装

function test(){
    var a = 3
    if(a===3){
        var b = 4
        console.log('abc')
    }else{
        console.log('abcd')
    }
    return a+b //可以找到b
}

var,const

let

function test(){
    var a = 3
    if(a===3){
        let b = 4
        console.log('abc')
    }else{
        console.log('abcd')
    }
    return a+b
}

this是一个动态的作用域

var和let的区别

  1. window可以访问var
  2. var可以重复定义
  3. let不能进行变量提升

const

  1. 不能给常量复制

参考文献

什么是作用域

JavaScript深入之词法作用域和动态作用域

冴羽的博客

深入理解JS中声明提升、作用域(链)和this关键字

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值