在 javascript 中捕获“'this”

capturing "'this" in javascript

我从在线资源创建了一个链 API,我理解它,除了一件事,我将 "this" 存储在一个变量中 - 为什么?我听说它捕获它以保护它,我不完全确定那是什么意思。为什么我要保护 "this" 以及为什么我将它存储在一个变量中,将它存储在一个变量中有什么作用?这如何改变 "this"?我在这里和 google 上进行了快速搜索,但没有找到答案。谢谢

function Calc(value){
    let self= this;//captures this?
    self.value=value;//sets the initial value;

    self.add=function(addVal){
        self.value+=addVal;
        return self;
    }

    self.sub=function(subVal){
        self.value-=subVal;
        return self;
    }
    self.mult=function(multVal){
        self.value*= multVal;
        return self;
    }

    self.div=function(subVal){
        self.value/= subVal;
        return self;
    }
}

let cal= new Calc(10);

cal.add(2).mult(2).sub(2).div(2);

你并不是真的存储 this在一个变量中,你只是将引用存储到this context variable 在变量中。这很好但很重要的区别。 你为什么这样做?那么,this 是一个动态引用,它总是引用当前的 上下文 。例如,如果您调用一个新函数,则会创建一个新的 context(或者更准确地说是一个 Environment Record)。

因此,如果您不存储来自外部上下文 function Calc 的引用,则无法在子上下文 (add, sub, mult, div) 中访问它,因为每个子上下文都有自己的 this参考。