Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内联和非内联JavaScript之间的不同行为_Javascript_Html_Jsfiddle - Fatal编程技术网

内联和非内联JavaScript之间的不同行为

内联和非内联JavaScript之间的不同行为,javascript,html,jsfiddle,Javascript,Html,Jsfiddle,我正在尝试建立一个计时器。请比较两种情况(第一种有效,第二种无效): 内联javascript 非内联javascript 问题出在哪里?第二个将timedCount函数包装在jQueryready函数中,因此在全局范围内不可用 var seconds = 0; timedCount = function() { $("#txt").val(seconds); seconds += 1; setTimeout("timedCount();",1000); }

我正在尝试建立一个计时器。请比较两种情况(第一种有效,第二种无效):

  • 内联javascript
  • 非内联javascript

问题出在哪里?

第二个将
timedCount
函数包装在jQuery
ready
函数中,因此在全局范围内不可用

  var seconds = 0;

timedCount = function() {
    $("#txt").val(seconds);
    seconds += 1;
    setTimeout("timedCount();",1000);
}

修复:

这是jsFiddle的“JavaScript部分”用户经常遇到的问题。您可以看到,放入“JavaScript部分”的代码被包装在一个用作
load
处理程序的函数中,因此在第二个示例中,实际输出结果如下:

  <script type='text/javascript'>
  //<![CDATA[ 
  $(window).load(function(){
  var seconds = 0;

function timedCount() {
    $("#txt").val(seconds);
    seconds += 1;
    setTimeout("timedCount()",1000);
}
  });
  //]]> 
  </script>
使用
timedCount=function(){…}使
timedCount
成为一个全局函数

这只会使
timedCount
成为一个全局值,因此当
setTimeout
尝试计算
timedCount()从全局范围中,它会成功,因为全局范围中有一个
timedCount
函数

  var seconds = 0;

timedCount = function() {
    $("#txt").val(seconds);
    seconds += 1;
    setTimeout("timedCount();",1000);
}

不知道你在找一个详细的解释!