• 闭包


    区别
    
    代码1:
    var scope = "global scope";
    function check(){
        var scope = "local scope";
        function f() {return scope;}
        return f;
    }
    check()(); //local scope
    
    代码2:
    var scope = "global scope";
    function check(){
        var scope = "local scope";
        function f() {return  this.scope;}
        return f;
    }
    check()();//global scope
    
    分析
    代码1 与代码2 只是多 了一个this。就发生了,结果就发生了变化。 为啥呢? 答案:就是闭包和上下文。 闭包:函数的执行时依赖作用域的,这个作用域是在函数定义的时候决定的,不是函数调用的时候决定的。----》也就是说,f函数中的 scope变量的作用域, 在整个函数定义的时候,已经决定了。 ----也就是包裹他的函数的scope。 那这就奇怪了?为啥代码2 又变成了全局作用域下的变量了你额? 其实我们观察到,代码2中的this,他就是代指的当前的上下文。【f()函数在执行的时候,其实有一个小动作,我们没有看到的,那就是 传递了上下文 ,到f函数中去了】 也就是: f(window){}将当前的上下文,(此时是window传入到f函数中去了。scope也就是 全局的变量了) 由此,我们来看 function check(){ var scope ="local scope"; function f() {return this.scope;} return f; } //check()(); var obj ={ scope:"obj" } check().call(obj) //obj----因为现在的小动作,传参 是obj的上下文。 总结 闭包:作用域在定义的时候决定。 小动作:传入上下文参数的小动作,就破坏了这种规则。(用this的时候 ,默认 就是 悄悄的做这个 传入上下文小动作) 记住:这个传入this的 小动作偶,他没有告诉你,就传入进入了,但是你不能看不到他偶
  • 相关阅读:
    [EOJ]2019 ECNU XCPC March Selection #1
    [模板]宏定义
    [POJ]poj1961,poj2406(KMP)
    [模板]KMP
    [CF]Avito Cool Challenge 2018
    [CF]Codeforces Round #528 Div.2
    [POJ]POJ1328(贪心)
    洛谷 P3808 【模板】AC自动机(简单版) 题解
    中科院的难题 题解
    【转】洛谷 P3722 [AH2017/HNOI2017]影魔 题解
  • 原文地址:https://www.cnblogs.com/smallstudent/p/5424070.html
Copyright © 2020-2023  润新知