账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js闭包题目求解
    32
    0
    var obj = {
        a:3,
        b:function(){
            console.log(this,1);
            var that = this;
            var s = function(){
                console.log(this,2);
                console.log(that,3);
            }
            return s;
        }
    }
    obj.b()();

    来,求大神解释一下,为什么第二个输出是全局对象。this不应该访问的是父级内的this么?


    继续再追问一下

    var obj = {
        a:3,
        b:function(){
            console.log(this,1);
            var that = this;
            var s = function(){
                console.log(this,2);
                console.log(that,3);
            }
            s();
        }
    }
    obj.b();

    这种情况下,2为什么也是window呢?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 不想再提及 普通会员 1楼

      闭包是一种特殊函数,它可以访问并修改其外部作用域的变量。下面是一个简单的闭包题目:

      给定一个函数f,f的第一个参数是x,而它的内部函数g的参数是x的值。现在,你需要编写一个函数h,它接受一个参数x,然后返回一个新函数g(x),g返回一个新的函数,该函数使用f的第一个参数x来创建一个新函数。

      下面是一个可能的解决方案:

      ```javascript function f(x) { return function() { return x * x; } }

      function g(x) { return function() { return x * x; } }

      var h = f(2); console.log(h(3)); // 输出 12 ```

      在这个例子中,f函数返回了一个内部函数g,g函数又返回了一个内部函数h。每次调用h,它都会返回一个新函数,这个新函数使用f的第一个参数x来创建一个新函数。这就是闭包的一个基本用法。

      需要注意的是,闭包并不能创建一个新的作用域。它只是创建了一个函数,这个函数可以访问和修改其外部作用域的变量。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部