JS查找上级作用域

27 篇文章 0 订阅

JS查找上级作用域

  • 当前函数执行,形成一个私有作用域A,A的上级作用域是谁,和他在哪执行的没有关系,和他在哪创建(定义)的有关系,在哪创建的,它的上级作用域就是谁
var a = 12;
function fn() {
    //=>arguments:实参集合
    //=>arguments.callee:函数本身FN
    //=>arguments.callee.caller:当前函数在哪执行的,CALLER就是谁(记录的是它执行的宿主环境),在全局下执行CALLER的结果是NULL
    console.log(arguments.callee.caller);
}
function sum() {
    var a = 120;
    fn();
}
function aa() {
    fn();
}
aa();

//输出:
ƒ aa() {
    fn();
}

接下来可以看下这道题

var n = 10;
function fn() {
    var n = 20;
    function f() {
        n++;
        console.log(n);
    }
    f();
    return f;
}
var x = fn();
x();
x();
console.log(n);

在这里插入图片描述大白话:

//var x = fn();
//此时的 fn() ==> return f;  f ==> n++; console.log(n) 
// 在 f()中 没有定义 n  所以往上级作用域寻找 n  在fn()中 n =20
// 所以 先回执行  n++ console.log(n)  输出 21 
// 然后在 执行 x()   此时x()==>f()  也就是 n++ console.log()
// 由于是闭包 所以 n 不会不销毁  一直叠加  22   
//x()   同理  ==》23
// console.log(n);   不会去寻找闭包中的n  所以是全局变量 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值