【发布时间】:2014-12-03 20:55:10
【问题描述】:
if 语句中的 javascript 函数提升是怎么回事? js只是不这样做吗?以下代码在浏览器中运行时运行良好。两秒钟后它会发出“嘿”的警报。
<script>
setTimeout(hey,2000)
function hey(){
alert('hey')
}
</script>
但是添加一个琐碎的if 声明:
<script>
if(true){
setTimeout(hey,2000)
function hey(){
alert('hey')
}
}
</script>
突然它抱怨hey is not defined。
现在,如果您将回调从 hey 更改为 function(){hey()},如下所示:
<script>
if(true){
setTimeout(function(){hey()},2000)
function hey(){
alert('hey')
}
}
</script>
然后它再次开始工作,即使使用 if 语句。那到底是怎么回事?
【问题讨论】:
-
我can't reproduce你描述的问题。
-
jsfiddle.net/r1oc1joh JFiddle 接受它。
-
我正在使用火狐。您可以直接将该代码剪切并粘贴到文件中而无需任何其他代码,这发生在我身上。
-
两人都在这里工作...jsfiddle.net/rfornal/3807s37n/1。刚刚在 Firefox 中尝试过,没有任何问题。
-
也为我工作。我认为您必须运行一些与您在此处粘贴的代码不同的代码才会导致该错误:)
标签: javascript hoisting