这两个javascript表达式之间有什么区别?

时间:2011-08-01 11:19:52

标签: javascript html

我有一个<a>元素应该运行代码而不是重定向。

这里有两个代码示例,我认为应该具有相同的效果,但它不会:

这有效:

<a href="#" onclick="alert('Works'); return false;" />

这不会:

<a href="#" onclick="return function() {alert('don't Work'); return false;};" />

他们俩不应该这样做吗? 是不是第二次尝试的表达式被评估,调用匿名函数并返回false?

谢谢!

3 个答案:

答案 0 :(得分:6)

第二个例子定义了一个函数并返回它。它从不称呼它。

onclick="return function() {alert('don\'t Work'); return false;}();" 

如果你打电话(并修正引用错误),那么你会得到同样的效果。

答案 1 :(得分:1)

没有。这不是有效的javascript,因为'中的don't过早地结束了字符串。将don't替换为does not,看看会发生什么。

看到昆汀回答你没有调用这个函数的事实!

答案 2 :(得分:1)

第二行返回一个函数对象,不运行它。 而是运行以下:

<a href="#" onclick="alert('Works'); return false;" >first link</a>
<a href="#" onclick="function x() {alert('don\'t Work'); return false;}; return x();" >second link</a>

此外,你需要逃避'角色'不要工作“。