<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>An example</title>
<script type="text/javascript">
function User(id) {
this.id = id;
};
var bob = new User(32);
var jack = new User(bob.id);
jack.id = 100; // Set a breakpoint here, but it does not stop here
alert('end of test' + jack.id);
</script>
</head>
<body>
</body>
</html>
顺便说一下,断点在chrome中正常工作。
我很困惑......这应该是一个非常简单的例子。这是Firefox的错误吗?
谢谢!
答案 0 :(得分:1)
看起来像是一个萤火虫的bug。在最后一个语句之前添加新行似乎可以解决问题。
答案 1 :(得分:1)
的确,我也复制了它。似乎是一个错误。
然而有些注意事项:
一般来说,建议最小化JavaScript的执行,就像你正在做的那样,但是在页面加载后将其推迟。例如。您可以将所有内容都包含在名为init
的函数中,然后将addEventListener
/ attachListener
用于load
事件(或写入<body onload="init()">
)。在HTML中执行JS即将减慢页面的呈现速度;必须解析和执行所有JS,因为它可能会动态添加一些HTML元素,这将改变页面稍后的HTML呈现。因此,避免以这种方式添加到页面中的计算量大且长的脚本。
您也可以将代码包装在所谓的IIFE(立即调用的函数表达式)中:
<script type="text/javascript">
(function () {
function User(id) {
this.id = id;
};
var bob = new User(32);
var jack = new User(bob.id);
jack.id = 100; // Set a breakpoint here, but it does not stop here
alert('end of test' + jack.id);
})();
</script>
在这种情况下,Firebug正确执行断点。
请注意,Firebug中的代码清单中的行号13和14未标记为绿色。这是来自Firebug的信息,如果你把它放在这一行,没有断点。在大多数情况下,这意味着该行中没有JavaScript(例如:HTML,空行,注释等),但有时这是由于Firebug中的错误。