javascript - "clear"是 Javascript 中的保留字吗?

标签 javascript

我只是花了很长时间才弄清楚我不应该使用 clear() 作为 Javascript 中的函数的名称:

<head>
    <script type="text/javascript" src="Array.js"></script>
</head>
<body>
    Hello!!!!<br>
    <button type="button" onClick="clear()" id="ppp">Shoo!</button><br>
    <button type="button" onClick="add()" id="add">Add a few elements</button><br>
    <button type="button" onClick="check()" id="check">Check the array</button><br>
    <p id="results">Results will appear here.</p>
    <script type="text/javascript">
initialize();
    </script>
</body>

这是 Array.js:

var results;

function initialize(){
 results = document.getElementById("results");
}

function add() {
results.firstChild.data="add";    
}

function clear() {
results.firstChild.data = "Hello?";
}

function check() {
results.firstChild.data = "check";
}

症状:单击“添加”和“检查”按钮会得到我期望的结果,但单击“清除”按钮什么也没做。

如果我将 clear() 重命名为 clearxyz(),它可以正常工作。

我的问题:

  1. “明确”是保留字吗?我没有在列表中看到它: https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words
  2. 有没有我应该使用的调试技巧来解决这种问题 以后有事吗?我花了很长时间(我是菜鸟!) 弄清楚函数的名称是我的问题。

非常感谢。 编辑:我使用的是 Firefox 6.0,我添加了换行符以显示 Array.js 的开始位置。

最佳答案

正如其他人所说,clear 不是保留关键字。好像调用的函数是document.clear [MDN] .调用

console.log(clear === document.clear);

事件处理程序内部返回 true

DEMO

看来,document 在事件处理程序的作用域链中....现在的问题是为什么。

JavaScript: The Definitive Guide说:

In an event handler as HTML attribute, the Document object is in the scope chain before the Window object (...)

由于您的方法是全局的,这意味着它是 window 对象的属性,因此在作用域链中找不到它,因为 document.clear 在作用域链。

我还没有找到这方面的任何规范。该指南还说人们不应该依赖它,所以我认为这不是官方的。

如果表单中有表单元素,那么即使是相应的 form 元素也会在作用域链中(不确定这是否适用于所有浏览器)。这是造成混淆的另一个原因。


有两种(并非唯一的)方法可以避免这种情况:

  • 不要使用内联事件处理程序。这被认为是不好的做法,因为它混合了逻辑和表示。有other ways附加事件处理程序。

  • 不要污染全局命名空间。在全局范围内创建一个对象(使用您确定不会与任何 windowdocument HTML 元素的属性或 id)并将函数分配为该对象的属性。每当你调用一个函数时,你都是通过这个对象来引用它的。还有other ways为您的代码命名空间。

关于javascript - "clear"是 Javascript 中的保留字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165570/

相关文章:

javascript - 重构 Jquery 函数以使其可重用

Javascript:%s 或 %d 代表字符串?

javascript - 当我们在顶部有一个持久的栏时 anchor 链接

javascript - 社交媒体按钮会减慢网站加载时间

javascript - 将选定的单选按钮设为粗体

javascript - Javascript 中的日期选择器

javascript - 根据自定义属性获取选项元素

javascript - HTML 脚本标签和非 JS 内容 - Firefox

javascript - 在 100 个问题的测验中,问题数组被映射,那么如何轻松地存储问题、选择的选项和问题的答案?

javascript - 如何合并两个 JSON 文件然后检索它?