在处理JavaScript函数时,name是一个特殊属性

时间:2010-10-23 22:04:22

标签: javascript html

<body>
<script type="text/javascript">
    function name(firstname)
    {
        alert("Your firstname: " + firstname);  
    }
</script>

<form>
    <input type="button" value="Do it" onclick="name('aaron')"/>
</form>
</body>

这不适用于Chrome / IE8。 IE8状态Object不支持此操作。它与 name 的函数名称有关。如果我将函数的名称更改为 people ,它的工作原理是什么?

4 个答案:

答案 0 :(得分:7)

这不是保留字,而是 window.name的冲突。使用window属性名称作为IE中的全局变量存在 问题,但只要您使用var或{{1}声明全局变量就可以了。你在这里有关键字。

你在这里有一个奇怪的 - 据我所见,未记载的IE-quirk(由WebKit复制),在通过内联属性声明的事件处理程序中,目标元素的属性被视为局部变量。这可能是因为您可以编写如下代码:

function

'cos说<input name="foo" value="bar" onclick="alert(name+': '+value)"/> // foo: bar 显然太难了。 IE尝试“方便”再次导致奇怪的不可预测的错误。

这是不使用内联事件处理程序属性的另一个原因。没有他们:

this.name

工作正常。

答案 1 :(得分:2)

扩展之前的答案(对不起,我还不能发表评论!),名字不完全是保留字。

https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/name

Chrome将此行误解为尝试访问匿名函数(由内联事件处理程序创建)

<input type="button" value="Do it" onclick="name('aaron');"/>

您可以通过

获得预期的行为
<input type="button" value="Do it" onclick="window.name('aaron');"/>

答案 2 :(得分:1)

“name”是HTML5中定义的窗口(全局)对象的属性。它不是保留的JavaScript单词(您可以找到保留关键字here的列表),但由于它是在HTML5中定义的,因此对于开发用于的JavaScript代码,不建议使用“name”作为函数/变量名称HTML页面。

答案 3 :(得分:0)

这是因为window对象(全局范围)已经有一个名为name的属性。

名称name不是保留关键字,在其他范围(例如局部变量)中可以正常工作。您应该避免使用它,因为您可能无意中使用window对象中的属性而不是变量。