嵌套函数结构使setInterval函数不可见

时间:2016-10-03 01:57:03

标签: javascript function setinterval

CODE1

<html>
<head>
<script type="text/javascript">
    function showTime(){
            var c=document.getElementById("text");
            var nowTime=new Date();
            c.innerHTML="time is  "+nowTime.toLocaleTimeString();
            }
    function startTime(){
        setInterval("showTime()",1000);
        }

</script>
</head>
<body onload="startTime()">
<div id="text"></div>
</body>
</html>

它成功运行,现在在startTime函数中嵌套showTime函数。

码2

<html>
<head>
<script type="text/javascript">
    function startTime(){
        function showTime(){
            var c=document.getElementById("text");
            var nowTime=new Date();
            c.innerHTML="time is  "+nowTime.toLocaleTimeString();
        }
        setInterval("showTime()",1000);
    }
</script>
</head>
<body onload="startTime()">
<div id="text"></div>
</body>
</html>

发生错误ReferenceError: showTime is not defined 1.对于code1,setInterval函数中双引号的含义是多少?
2.对于code2,为什么showTime可以从startTime调用,例如在code1中?

2 个答案:

答案 0 :(得分:0)

"showTime()"是一个不可调用的字符串 正确的方法是:

 function startTime(){
        function showTime(){
            var c=document.getElementById("text");
            var nowTime=new Date();
            c.innerHTML="time is  "+nowTime.toLocaleTimeString();
        }
        setInterval(showTime,1000);
    }

答案 1 :(得分:0)

我认为这可能是评估范围问题。

&#13;
&#13;
function test() {
  var x = 2,
    y = 4;
  console.log(eval("x + y")); // Direct call, uses local scope, result is 6
  var geval = eval;
  console.log(geval("x + y")); // Indirect call, uses global scope, throws ReferenceError because `x` is undefined
}
test();
&#13;
&#13;
&#13;

内部setInterval还使用eval确定函数。 因此,由于直接和间接调用的这种行为,它将引发参考错误。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval