var a = {
    name:"n",
    A:function(){
        var _this = this;
        var tt = setInterval(function(){alert(_this.name)},1000)
    },
    B:function(){
        clearInterval(tt);
    }
}
闭包

解决方案 »

  1.   

    //我反正没什么好方法,建议把A中的局部变量替换成全局变量<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript">
    //var a='asp.php.jsp.javascript';
    //alert(a.split('.').reverse().join('.'));
     
    var a = {
        name:"n",
    tt:0,
        A:function(){
            var _this = this;
            tt=self.setInterval(function(){document.getElementById('div1').innerHTML+=_this.name;},1000);
        },
        B:function(){
            window.clearInterval(tt);
    document.getElementById('div1').innerHTML+='计时器已经被清除';
        }
    }
    a.A();
    </script>
    <div id="div1"></div>
    <input type="button" value="停止按钮" onclick="return a.B();"/>
      

  2.   

    js中的局部变量只能在函数自身内部访问到,如果想在外部访问到则须创建闭包。至于楼主的问题,如果目的在于消除计时器,那1楼方法即可;如果想在清楚计时器的同时不污染全局变量可以在A内创建闭包,如下:var a = {
        name:"n",
        A:function(){
            var _this = this;
            var tt = setInterval(function(){alert(_this.name)},1000);
            _this.B=function(){
             clearInterval(tt)
            };
        }
    };
    //需要注意的一点是:B属性是在A执行后才添加到对象a中的。
    a.A();
    a.B();