在if
语句中提升javascript函数的处理是什么? js不这样做吗?以下代码在浏览器中运行时效果很好。它会警告"嘿嘿"两秒后。
<script>
setTimeout(hey,2000)
function hey(){
alert('hey')
}
</script>
但是围绕这个添加了一个trival 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语句也是如此。那是怎么回事?
答案 0 :(得分:4)
用来解释:
使用:
if ( hasRequiredJQueryVersion ) { // Test data here // Library code here }
无处不在除了 Firefox:
if ( true ) { testFunction(); function testFunction() { alert(‘testFunction called’); } }
这是您应该避免的行为,因为它特定于Firefox,即使Firefox的行为技术上是正确的。
答案 1 :(得分:-2)
第三个例子与第二个例子是一致的:setTimeout
实际上并没有调用hey
,因此不关心它是否已被定义。只有当超时发生时才调用hey
,已定义