Javascript 是否允许JS嵌套回调?

Javascript 是否允许JS嵌套回调?,javascript,jquery,Javascript,Jquery,我正在尝试运行一个JS回调的w3schools示例,它在第一次回调中运行正常,并显示“段落现在隐藏正常”,但没有显示第二个警报,我做错了什么?还是不允许嵌套回调 <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script> $(doc

我正在尝试运行一个JS回调的w3schools示例,它在第一次回调中运行正常,并显示“段落现在隐藏正常”,但没有显示第二个警报,我做错了什么?还是不允许嵌套回调

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK", function(){            
                 alert("2nd alert FAIL");
            });
        });
    });
});

</script>
</head>
<body>

<button>Hide</button>

<p>This is a paragraph with little content.</p>

</body>
</html>
不提供回拨
alert
是上世纪90年代的一个错误,它会导致浏览器的主JavaScript线程在警报显示时突然停止,因此在这种特殊情况下,只需将当前拥有的代码放在
警报之后的回调中即可。(或者更好的方法是:不要使用
alert
:-)
alert
(以及
prompt
confirm
)是整个“不要阻止线程”规则的过时例外

没有理由其他也嵌套的回调不起作用。事实上,他们做到了:

$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$(“p”).hide(“slow”,function(){
警告(“该段落现在已隐藏确定”);
警报(“第二次警报失败”);
});
});
});
隐藏
这是一段内容很少的段落

不提供回调
alert
是上世纪90年代的一个错误,它会导致浏览器的主JavaScript线程在警报显示时突然停止,因此在这种特殊情况下,只需将当前拥有的代码放在
警报之后的回调中即可。(或者更好的方法是:不要使用
alert
:-)
alert
(以及
prompt
confirm
)是整个“不要阻止线程”规则的过时例外

没有理由其他也嵌套的回调不起作用。事实上,他们做到了:

$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$(“p”).hide(“slow”,function(){
警告(“该段落现在已隐藏确定”);
警报(“第二次警报失败”);
});
});
});
隐藏
这是一段内容很少的段落


方法不能接受函数。只能显示字符串或对象。请参见
alert()
方法无法接受函数。只能显示字符串或对象。请参见

允许嵌套回调,但通常不鼓励嵌套回调(使代码更难阅读)

然而,您遇到的问题是,
alert
不接受回调,它只接受一个参数(请参阅)

此代码应适用于:

$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK");
            alert("2nd alert FAIL");
        });
    });
});

允许嵌套回调,但通常不鼓励嵌套回调(使代码更难阅读)

然而,您遇到的问题是,
alert
不接受回调,它只接受一个参数(请参阅)

此代码应适用于:

$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK");
            alert("2nd alert FAIL");
        });
    });
});

您可以使用确认来获取用户输入,也可以只使用两个警报。您在哪里见过以函数作为第二个参数的
警报()?“嵌套回调”当然是允许的,主要是因为实际上没有“嵌套回调”这样的构造。您所做的只是将函数对象作为参数提供给期望它们的函数调用。但是函数必须期望它。您不能通过添加更多参数来任意重新定义现有函数的工作方式。请不要将W3用作参考。他们的文章经常过时,有时甚至完全错了。MDN对于HTML、CSS和JS来说更全面、更准确。^^MDN=请注意,MDN是协作的,由社区编辑的,因此它有时确实会出现奇怪的错误——但社区在出现错误时擅长修复它们。(如果您不是主要阅读英文版,不幸的是,您有时确实希望仔细检查文章的英文版,因为它们往往会得到更多的更新。)您可以使用“确认”获取用户输入,也可以只使用两个警报。您在哪里见过以函数作为第二个参数的
警报()
?“嵌套回调”当然是允许的,主要是因为实际上没有“嵌套回调”这样的构造。您所做的只是将函数对象作为参数提供给期望它们的函数调用。但是函数必须期望它。您不能通过添加更多参数来任意重新定义现有函数的工作方式。请不要将W3用作参考。他们的文章经常过时,有时甚至完全错了。MDN对于HTML、CSS和JS来说更全面、更准确。^^MDN=请注意,MDN是协作的,由社区编辑的,因此它有时确实会出现奇怪的错误——但社区在出现错误时擅长修复它们。(如果你不是主要阅读英文版本,不幸的是,你有时确实想仔细检查文章的英文版本,因为它们往往会得到更多的更新。)有趣的事实:规范允许:“可选地,在等待用户确认消息时暂停。”@JamesThorpe:也许这是将
警报
等引入非阻塞领域的缓慢发展的第一步。(虽然很难看出
提示符
确认
是什么样子。但是
警报
…)在规范中允许它,然后更新用户代理,让用户选择这样做,然后将其设为默认值,但可以选择旧行为,然后…完全删除旧行为。希望如此。:-)有趣的事实:该规范允许:“有选择地,在等待用户确认消息时暂停。”@JamesThorpe:也许这是缓慢发展的第一步,将
警报
等带入非阻塞领域。(虽然很难看出
提示符
确认
是什么样子。但是
警报
…)在规范中允许它,然后更新用户代理,让用户选择这样做,然后将其设为默认值,但可以选择旧行为,然后…完全删除旧行为。希望如此。:-)