gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:13:49 26 4
gpt4 key购买 nike

我只是花了很长时间才弄清楚我不应该使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com