Javascript - 在函数名称中需要下划线吗?

时间:2017-06-09 08:03:09

标签: javascript html

我对此代码没有任何问题,但我很好奇为什么下面的函数似乎需要在其名称中使用下划线。

function _clear()
    {
        document.getElementById("test").innerHTML =  "";
    }

函数_clear()仅在函数名称包含下划线时单击按钮后执行。

<button type="submit" onClick="_clear()">Clear</button>

2 个答案:

答案 0 :(得分:2)

根据MDN,clear()是Document对象的一种方法,可以通过编写document.clear()来调用它。但是,由于这种方法已被弃用,因此根本不应该调用它。实际上,在HTML5中,该方法不执行任何操作(请参阅HTML5 spec)。

因此,在实际从Document对象中删除此方法之前,可能会得出结论,如果用户定义的函数与Document的方法具有相同的名称,则存在潜在的冲突。也就是说,使用谷歌浏览器(版本49.0.2623.112米),以下代码运行正常:

var d = document;
d.g = d.getElementById;

function clear()
{
        d.g("test").innerHTML =  "";
    }

var test = d.g("test");
test.onmouseover=clear;

请参阅demo

clear()和document.clear()之间不太可能存在冲突。我写了一个用户定义的函数,它使用与另一个文档方法相同的名称,代码运行完美;见here

显然,当onclick事件属性被赋予用户定义的函数“clear()”时,clear()与document.clear()相关联会产生某种混淆;请参阅here并阅读官方答复中的优秀解释。简而言之,问题归结为“...... Document对象位于Window对象(...)之前的作用域链中”(参见JavaScript: The Definitive Guide)。

如果由于某种原因你确定代码可以工作,那么这里是如何指定正确的上下文:

HTML:

<div id="test">a test to see if this will clear</div>
<button id="but" onclick="window.clear()">Clear</button>

因此,用户定义的函数实际上成为Window对象的一个​​方法,与window.open()之类的内置函数一起,允许代码执行;见here

注意,发生点击事件时发生操作的最佳方法是将此行放在JavaScript代码中,并给出id为“but”的按钮:

but.addEventListener('click',clear);

请参阅demo

答案 1 :(得分:0)

那是因为{{1}}是JavaScript中已存在的函数。您还可以将下划线添加到末尾或添加另一个c或执行任何操作以使该函数具有不同的名称。