猿问

在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";}

症状:点击‘添加’和‘检查’按钮给我的结果,我希望,但点击‘清除’按钮没有任何作用。

如果我改名清空()Clearxyz()它工作得很好。

我的问题:

  1. “清楚”是个保留词吗?我没在名单上看到:

    https:/developer.mozilla.org/en/JavaScript/照顾者/保留词

  2. 将来我是否应该使用调试技巧来解决这类问题呢?我花了很长时间(我是个菜鸟!)找出这个函数的名字是我的问题。

非常感谢。编辑:我正在使用Firefox6.0,我添加了一个行中断来显示Array.js的起始位置。


30秒到达战场
浏览 256回答 3
3回答

回首忆惘然

就像其他人说的,clear是不保留关键字。看来被调用的函数是document.clear&nbsp;[MDN]..调用console.log(clear&nbsp;===&nbsp;document.clear);在事件处理程序内部返回true.演示所以看起来,document在事件处理程序的作用域链中.现在的问题是为什么。JavaScript:权威指南说:在作为HTML属性的事件处理程序中,文档对象位于窗口对象(.)之前的作用域链中。方法是全局的,这意味着它是window对象时,在作用域链中找不到它,如document.clear在作用域链中出现的更早。我还没有找到这方面的任何规范。指南还说,人们不应该依赖这一点,所以我认为这不是正式的。如果窗体中有窗体元素,则即使是相应的form元素将位于范围链中(但不确定这是否适用于所有浏览器)。这是造成混乱的另一个原因。有两种(不是排他性的)方法来避免这种情况:不要使用内联事件处理程序。它被认为是错误的做法,因为它是混合逻辑和表示。确实有其他&nbsp;路途要附加事件处理程序,请执行以下操作。不要污染全局名称空间。在全局范围内创建一个对象(使用您确信不会与任何对象发生冲突的名称)。window或document属性或HTML元素的ID),并将函数指定为此对象的属性。无论何时调用函数,都要通过这个对象引用它。也有其他方式来命名您的代码。

DIEA

不是按照MDN.编辑:你让我好奇,所以我就聚在一起这个小玩意.function&nbsp;clear()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;alert("you&nbsp;cleared&nbsp;just&nbsp;fine");}$('clear').addEvent('click',&nbsp;clear);有一个名为clear似乎运作得很好。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答