zoukankan      html  css  js  c++  java
  • 闭包

    区别
    
    代码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的 小动作偶,他没有告诉你,就传入进入了,但是你不能看不到他偶
  • 相关阅读:
    图片上传
    中间件
    放大镜
    JQ编写楼层效果
    AJAX,PHP,前端简单交互制作输入框效果
    AJAX中使用post,get接收发送数据的区别
    PHP内写css样式
    计算2个日期相差的月份
    react-相关技术栈之-dva/dynamic
    es6相关知识点
  • 原文地址:https://www.cnblogs.com/smallstudent/p/5424070.html
Copyright © 2011-2022 走看看