在尝试了解网络服务器的运作方式时,我遇到了这个问题:
//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专家,所以我不知道如何使用空函数。有人知道吗?
谢谢。
答案 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运算符的确切原因,例如,当您使用模板语言自动生成标记时。