Javascript 为什么第一个有效,第二个无效?全局和私有变量声明

Javascript 为什么第一个有效,第二个无效?全局和私有变量声明,javascript,global-variables,Javascript,Global Variables,第一个。这一个有效,我有var start=newdate();函数内部 function instance(){ var start = new Date(); document.getElementById("foo").innerHTML = start.getTime(); window.setTimeout(instance, 1000); } function start(){ window.setTimeout(instance, 1000); } va

第一个。这一个有效,我有var start=newdate();函数内部

function instance(){
    var start = new Date();
    document.getElementById("foo").innerHTML = start.getTime();
    window.setTimeout(instance, 1000);
}
function start(){
window.setTimeout(instance, 1000);
}
 var start = new Date();
 function instance(){
    document.getElementById("foo").innerHTML = start.getTime();
    window.setTimeout(instance, 1000);
    }
    function start(){
    window.setTimeout(instance, 1000);
    }
这是第二个不起作用的。var start=new Date()在函数外部

function instance(){
    var start = new Date();
    document.getElementById("foo").innerHTML = start.getTime();
    window.setTimeout(instance, 1000);
}
function start(){
window.setTimeout(instance, 1000);
}
 var start = new Date();
 function instance(){
    document.getElementById("foo").innerHTML = start.getTime();
    window.setTimeout(instance, 1000);
    }
    function start(){
    window.setTimeout(instance, 1000);
    }

即使第二个变量是全局变量而不是私有变量,它是否仍然可以工作?为什么一些全局变量可以工作而另一些不能工作?

在javascript中,函数就是变量,只是函数形式。因此,在第二个变量中,变量
start
和函数
start
冲突。例如,如果您要将
函数start(){
更改为
函数init(){
,它将起作用

这就是允许您定义函数的原因,例如

var foo = function() {
  ...
}
第一个有效,因为您有一个局部变量
start
和一个全局函数
start
,因此没有冲突

 var start = new Date();
 function instance(){
   document.getElementById("foo").innerHTML = start.getTime();
   window.setTimeout(instance, 1000);
 }
 function init(){
   window.setTimeout(instance, 1000);
 }