如何清空JavaScript函数实际上做了什么?

时间:2010-05-19 11:40:51

标签: javascript

在尝试了解网络服务器的运作方式时,我遇到了这个问题:

//myfile.js
function donothing(){};

//myfile.html
javascript:donothing(open('http://www.acme.com/whatever.jpg','','left=100, right=0, top=100, scrollbars=no, status=no, titlebar=no, resizable=no, toolbar=no, menubar=no, width=255, height=255'))

我不是JavaScript专家,所以我不知道如何使用空函数。有人知道吗?

谢谢。

6 个答案:

答案 0 :(得分:19)

这是一个自制的void替代品,以避免表达式返回值。

window.open将返回对已打开窗口的引用,这可能会产生意外结果。

例如,尝试将javascript:a=1粘贴到地址字段中 ​​- 这将导致其中包含数字1的空白屏幕,因为浏览器默认会尝试使用任何表达式的结果作为新文档运行

要避免这种情况,请使用javascript:void(a=1),因为void不会返回任何内容,因此结果不会用作新文档。

不需要使用donothing(foo=bar)或等效的Function.prototype(foo=bar),因为内置的void完全相同。

但是请注意,在将文本复制到地址字段时,使用void只需要 ,当你在链接中使用伪协议javscript:时,它是不必要的(你永远不应该这样做)反正)。

答案 1 :(得分:3)

完成工作的是open(...)。在调用函数之前首先计算操作数(并且Javascript不关心函数的操作数)。

答案 2 :(得分:2)

donothing函数传递一个它忽略的参数。然而,正是参数本身才能完成工作。

答案 3 :(得分:1)

donothing的调用只是作为裹尸布。在开始使用之前调用open函数。

显然,无论是谁写的,都觉得裸露的javascript:电话很脆弱。奇怪。

答案 4 :(得分:0)

嗯,虽然很难理解donothing但没有看到剩下的代码...但无论如何都会评估open函数。 所以正在发生的事情是调用open函数。

如果没有其他信息,为什么他们使用donothing来做这件事很难说:)

答案 5 :(得分:0)

  

但是请注意,只有在将文本复制到地址字段时才需要使用void,当你在链接中使用伪协议javscript时它是不必要的(你不应该这样做)。

不是100%真实。如果你用html写<a href="javascript:1+2;">clickme</a>,许多浏览器仍然会给你一个空屏幕,其返回值在Javascript中的计算结果为true。这就是在<a>标签中使用void运算符的确切原因,例如,当您使用模板语言自动生成标记时。