js高级之作用域scope

全局作用域:全局变量

顶级作用域:一级作用域

<script>
    //顶级作用域(父作用域)
    var x = "" //全局变量

	function fn(){
        //局部作用域:二级作用域(子作用域)
        var a = 123;//局部变量
        
        function aa(){
            //局部作用域:三级作用域(子作用域)
        }
    }
</script>

子作用域可以获取父级作用域的全部代码段
父作用域无法读取子作用域的代码段
var x = "111"
    function fn(){
        //局部作用域
        //x 自由变量:当前自身所处作用域中,不存在的变量(逐级寻找)
        console.log(x)//结果为undefined
        var x = "23424"//就近原则,程序从上往下运行,变量提升
    }
    fn()

常见的作用域场景

全局作用域

局部作用域(es5)/块级作用域(es6)

if(true){
    let aa = "xxx"
}
console.log(aa)//报错
//let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问
if(true){
    var aa = "xxx"
}
console.log(aa)//运行结果xxx
var与let声明变量

var:1、定义变量支持重复定义
2、导致变量提升
3、不支持块级作用域

let:1、变量无法重复定义
2、阻止变量提升
3、支持块级作用域

const声明常量(一般用大驼峰命名)
//也用于存储数据,一旦赋值值不允许发生变更
//声明一个只读的常量,一旦声明,常量的值就不能改变

静态作用域:

变量的解构赋值:

var [a,b,c] = [val,val2,val3]
var {age,sex,admin} = {userName:"admin",sex:"女",age:"22"}

import {http,response,request} form "http"
var str="qwertyuioasdfghjklxcvbn"
var arr=[...str]
console.log(arr)//26字母a-z快速生成


var arr = ["meme","text"]
let obj = {userName:"admin",sex:"女"}
//var [a,b,c] = arr
var [a,b,c] = [...arr]//把arr里的值循环遍历出来赋给a,b,c
console.log(a,b,c)//meme text undefined

var {userName,sex} = obj//变量名需要与原对象的一致
console.log(userName,sex)//admin 女

//交换变量的值
var a = 10
var b = 20
var [b,a] = [a,b]
console.log(a,b)

运算符 ...(扩展运算符)

快速展开一个可迭代(遍历)的数据结构

string
arr = []  //数组
obj = {}  //对象
set = new Set()


var str="qwertyuioasdfghjklxcvbn"
var arr=[...str]
console.log(arr)//26字母a-z快速生成

作用域链scope chain

用来描述作用域与子作用域之间的关系

函数提升

/声明式的自定义函数会提升
//提升(将声明函数提升至当前作用域的最顶端)

//字面量
var a = function(){
    console.log("11")//打印出来11
}
a()
-------------------------------
a()
var a = function(){
    console.log("11")//打印报错
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值