2010-05-19 33 views
3

在试图了解Web服务器是如何工作的,我来到这个防空火炮:空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的专家,所以我不明白怎么一个空函数可以进行工作。有人知道吗?

谢谢。

回答

19

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

window.open将返回对打开的窗口的引用,并且这可能会有意想不到的结果。

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

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

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

但头脑,使用无效的是只有将文本复制到地址栏,当需要时,它不是必需的,当您使用中的链接(你永远不反正)伪协议javscript:

+0

+1:享受你的第一个尼斯答案徽章:) – 2010-05-19 22:47:53

2

donothing函数被传递一个它忽略的参数。然而,这是工作的参数本身。

+1

实际上,为了将参数传递给donothing,它首先被执行。函数的RESULT(返回值)(在这种情况下打开)然后传递给数据库。 – Konerak 2010-05-19 11:45:57

+0

这就是我的意思。 – 2010-05-19 11:58:29

3

做这项工作的人是open(...)。在调用函数之前首先评估操作数(并且Javascript不关心函数操作数的数量)。

0

好吧,虽然很难理解donothing这一点而没有看到代码的其余部分......无论如何将评估open函数。 如此有效地发生的是open函数被调用。

为什么他们正在使用donothing做到这一点很难没有其他信息:)

+0

感谢大家的反馈。 donothing()位于.js文件中,并用于以下超链接:Click me Gulbahar 2010-05-19 12:16:04

+0

什么是更奇怪的是,当我单击此类超链接时,Fiddler代理不显示任何内容: -/ – Gulbahar 2010-05-19 12:43:59

+0

它不是奇怪的是,如果图像是从缓存中提供的。选择其中一个答案作为解决方案? – 2010-05-19 12:48:05

1

调用donothing只是充当护罩说。打开的功能在调用之前被调用。

显然是谁写了它觉得赤裸的JavaScript:电话是脆弱的。奇怪。

0

但头脑,将文本复制到地址栏时,只需要使用无效的,其时,没有必要使用伪协议javscript:在链接(你应该永远不会做反正)。

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

相关问题