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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    JavaScript关于this的一道小题
    63
    0
    var a = 10;
    var obj1 = {
        a: 20,
        fn: (function() {
            this.a *= 2;
            a = 5;
            var a = 6;
            return function() {
                this.a *= a;
                console.log(a)
            }
        })()
    }
    var obj2 = {
        a: 30
    }
    var fn = obj1.fn;
    fn();  //6???
    obj1.fn();  //6???
    obj1.fn.call(obj2);  //6???

    如上所示,函数运行之后,结果分别是6,6,6,但是我想来想去都不明白为什么是6....,就算var a = 6之后a等于6了,那为什么this.a *= a 之后a还是等于6呢?求大神指点一二。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 抱着月亮睡觉 普通会员 1楼

      在JavaScript中,this关键字可以用来确定函数或方法作用域的上下文。但是,this关键字的值可能会随着调用的顺序和上下文而改变。

      这是一个例子:

      ```javascript function test() { console.log(this); // 输出:undefined console.log(test.apply(this)); // 输出:window console.log(test.call(this)); // 输出:undefined }

      test(); ```

      在这个例子中,test函数首先调用console.log(this),输出undefined,这是因为thistest函数内部是undefined

      然后,我们尝试将test函数传递给apply方法,apply方法会创建一个新的函数,将test函数的上下文作为参数传递给它。在这种情况下,console.log(test.apply(this))会输出window,这是因为在apply方法内部,this被定义为全局对象。

      最后,我们尝试将test函数传递给call方法,call方法会直接将test函数的上下文作为参数传递给它。在这种情况下,console.log(test.call(this))会输出undefined,这是因为thiscall方法内部也是undefined

      总的来说,this关键字的值取决于你如何使用它。如果你想在函数内部访问全局对象的属性,你应该使用this关键字。如果你想在函数内部访问函数本身,你应该使用this关键字。如果你想在函数内部访问一个方法,你应该使用this关键字。

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