在处理JavaScript函数时,名称是一个特殊属性吗 函数名(firstname) { 警报(“您的名字:+firstname”); }
这在Chrome/IE8中不起作用。IE8状态对象不支持此操作。这与函数名为name有关。如果我将函数的名称更改为它工作的人…会得到什么?“名称”是中定义的窗口(全局)对象的属性。它不是一个保留的JavaScript单词(您可以找到保留关键字的列表),但由于它是在HTML5中定义的,因此对于为HTML页面开发的JavaScript代码,使用“name”作为函数/变量名是不可取的。在前面的答案上展开(对不起,我还不能评论!),name并不完全是一个保留单词 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/name Chrome将这一行误解为试图访问匿名函数(由内联事件处理程序创建)在处理JavaScript函数时,名称是一个特殊属性吗 函数名(firstname) { 警报(“您的名字:+firstname”); },javascript,html,Javascript,Html,这在Chrome/IE8中不起作用。IE8状态对象不支持此操作。这与函数名为name有关。如果我将函数的名称更改为它工作的人…会得到什么?“名称”是中定义的窗口(全局)对象的属性。它不是一个保留的JavaScript单词(您可以找到保留关键字的列表),但由于它是在HTML5中定义的,因此对于为HTML页面开发的JavaScript代码,使用“name”作为函数/变量名是不可取的。在前面的答案上展开(对不起,我还不能评论!),name并不完全是一个保留单词 https://developer.m
您可以通过执行以下操作来获得预期的行为
<input type="button" value="Do it" onclick="name('aaron');"/>
这是因为
窗口
对象(即全局范围)已经有一个名为名称
的属性
name
name
不是保留关键字,在其他范围内(例如局部变量)也可以正常工作。但是,您应该避免使用它,因为您可能会无意中使用窗口中的属性而不是变量。它不是保留字,并且它与窗口.name
冲突。在IE中使用窗口
属性名称作为全局变量存在问题,但只要使用var
或函数
关键字将其声明为全局变量就可以了
这里有一个奇怪的、据我所知的、未记录的IE怪癖(由WebKit复制),在通过内联属性声明的事件处理程序中,目标元素的属性被视为局部变量。这大概是为了让您可以编写如下代码:
<input type="button" value="Do it" onclick="window.name('aaron');"/>
工作正常。也许你应该根据函数的功能来命名,而不是用一般的词来命名。。比如printName、print_name等@fazo是的,我应该……但这并不能解决问题的原因……为什么要投否决票?如果你不解释你认为错误的地方,它就无法改善答案。无论如何,为了验证这个理论,它被当作局部var处理?通过输出…等…?如果您写入名称
,您会发现您并没有意外地全局或写入窗口。名称
,因为从处理程序外部的脚本中可见的名称
没有改变,而是按钮的字段名发生了更改。如果你说onclick=“value='hello'”
这会让事情变得更清楚。
<input type="button" value="Do it" onclick="window.name('aaron');"/>
<input name="foo" value="bar" onclick="alert(name+': '+value)"/> // foo: bar
<input id="doit" type="button" value="Do it"/>
<script type="text/javascript">
document.getElementById('doit').onclick= function() {
name('bob');
};
</script>