function aa(){
function js(){
alert("js");
}
setInterval("js()",3000);
}
代码这样写的时候,报错“缺少对象”
         function aa(){
function js(){
alert("js");
}
setInterval(function(){js();},3000);
}
这样写就可以过,请问这是为什么?开发项目中遇到的问题,这里只是举了一个简型的例子,求解。

解决方案 »

  1.   

    setInterval(js,3000);
    或者
    setInterval('js()',3000);
    理由:语法规定。
    over。
      

  2.   

    你的function js的作用域是在aa函数内部,setInterval执行的作用域是顶层,也就是window。
    可以在a里面写window.js = js; 或者直接在全局里定义js函数。
    补充over
      

  3.   

    不是语法,是内存!
            function aa() {
                this.js = function() {
                    alert("js");
                };
                setInterval("js()", 3000);
            }
            aa();这个是函数内存释放的问题,现在流行说闭包~以上方法,当你的方法aa不再调用的时候,当前函数占的内存没有被释放,所以可以调用的~假设对函数成员作public的模拟,var js = function() {};
    当你调用了aa()之后,aa所占的内存被释放,所以对象当然就缺失了,因为你是通过字符串调用的方法,所以解释器并不知道你要调用的内存块,以为释放aa所占内存是没问题的……但如果你 setInterval(js, 3000); 
    解释器知道你要引用js,那么调用aa()之后,就不立刻释放内存~
      

  4.   

    和作用域没关系
            function aa() {
                var js = function() {
                    alert("js");
                };
                setInterval(js, 3000);
            }
            aa();P.S. 鄙视蹭分的!
      

  5.   


    修改句话:假设对函数成员没有做public的模拟,var js = function() {};