JS变量查找的规则

1、变量查找的规范

左查询(对等号左边的变量进行寻址)
如果整条作用域链 都没有对应变量的声明;则会在全局自动声明一份

   /* var a = 3;
    b = a;*/
   console.log(b) //全局自动声明一份,3

右查询(对等号非左边的变量进行寻址)
如果整条作用域链 都没有对应变量的声明;则会报错

console.log(c)

2、作用域
变量的查找!!!走作用域链!!!

var x = 10;
function fn() {
    console.log(x);
}
function show(f) {
    var x = 20;
    fn()//调用fn函数的时候会倒回第二行去执行,该作用域没有定义X,往上一层找,全局x=10
}
show(fn);//10

3、经典闭包

    //编译阶段就已经生成作用域了!!!
    function wrap() {
        var a = "a"
        return function () {
            console.log(a)
        }
    }
    var inner = wrap()
    inner()

4、js三座大山&两头神兽

三座大山 : 作用域&作用域链  ; 执行上下文&执行上下文栈 ; 原型&原型链
    作用域&作用域链 : 决定了变量的查找规则;左查询 右查询
    执行上下文&执行上下文栈:
        a.函数调用时 实参如何对应形参
        b.给arguments赋值
        c.给this赋值
        d.闭包
    原型&原型链: 决定了属性的查找规则

两头神兽 : 闭包 原型
    闭包: 当函数可以记住并访问自己的作用域链时;就会产生闭包

个人理解:
编译阶段就已经有作用域了
一个作用域挂靠一个执行上下文
闭包市场说法 :内部函数使用了外部函数的变量
或者,当函数可以记住并访问自己的作用域链时,就会产生闭包。
记住:指的是->执行上下文的数据
闭包:就是某个函数要挂了,但是不能把变量带走,把数据放到一个容器里面给后面调用者。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值