• 闭包


    区别
    
    代码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的 小动作偶,他没有告诉你,就传入进入了,但是你不能看不到他偶
  • 相关阅读:
    Ubuntu 20.04下EasyConnect兼容性问题临时解决方案
    Ubuntu 20.04 LTS安装搜狗输入法,只需三条命令,还能自动更新
    Java笔记: 继承成员覆盖和隐藏
    Java扫雷游戏: JMine
    Emacs: 设置窗口标题格式
    Java笔记: protected的真正含义
    Java笔记: 初始化块
    Ubuntu跨版本安装软件
    百度编辑器 Ueditor 增加字体
    AspCms 升级百度编辑器
  • 原文地址:https://www.cnblogs.com/smallstudent/p/5424070.html
Copyright © 2020-2023  润新知