为了账号安全,请及时绑定邮箱和手机立即绑定

关于JS里的this问题。

关于JS里的this问题。

kevinZee 2017-03-06 13:41:39
<script type="text/javascript"> var value="1"; window.onload=function() { var oBtn=document.getElementsByTagName('input')[0]; oBtn.onclick=function() { function fn() { alert(this.value); }         fn();                      //打印出1 } } </script> <body> <input type="button" value="click"> </body>请问函数fn内的this为什么指向了window
查看完整描述

3 回答

?
ruibin

TA贡献358条经验 获得超213个赞

function fn()

        {

            alert(this.value);

        }

这个函数的运行环境是window,所以这里面的this指向window。如果你想打印出oBtn的value值,函数可以这样改造下,

window.onload=function()

{

    var oBtn=document.getElementsByTagName('input')[0];

    oBtn.onclick=function()

    {

        var _this = this; //此时运行环境中的this为oBtn

        function fn()

        {

            alert(_this.value);

        }

        fn();                      //打印出1

    }

}


查看完整回答
1 反对 回复 2017-03-06
  • kevinZee
    kevinZee
    多谢回复,我主要疑问就是fn的运行环境是window
?
滄浪之水

TA贡献15条经验 获得超2个赞

this 问题很简单,this总是指向当前调用的对象,如 object.method 如果没有隐去了调用的对象,则一般为全局对象,浏览器中是window对象, 在nodejs中是global对象。

查看完整回答
反对 回复 2017-03-06
?
qq_e累_0

TA贡献12条经验 获得超15个赞

应该是你生声明了一个全局函数(fn)   ;fn 是window下的。 

查看完整回答
反对 回复 2017-03-06
  • kevinZee
    kevinZee
    我声明在onclick里,那fn不应该只存在于这个事件的函数的作用域里吗,求解
  • qq_e累_0
    qq_e累_0
    var fn = function (){...} 才是在事件的函数的作用域里
  • kevinZee
    kevinZee
    多谢回复,我试了下用var fn = function (){...} ,运行环境还是在window下的。我觉得这里估计是不是可以按闭包的匿名函数理解,匿名函数具有全局性
  • 3 回答
  • 0 关注
  • 2278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信