让我们先看看纯js版本。
document.getElementById('h3style').onMouseOver = changeColor;
function changeColor(){ }
现在在这种情况下,分配一个函数是唯一能够做的事情。你可以明确地指定一些奇怪的东西,像是一个值,但这相当于代码无所作为(甚至没有错误)。重点是你不能指定一个变量“一些JavaScript”来完成,你只能创建一个包含“一些JavaScript”的函数。但是JavaScript本身具有eval()
这是能够执行JavaScript字符串版本
elem.onMouseOver = 'changeColor();'; // technically legal but does nothing (just assigns a string)
:换句话说,你不能做到这一点。例如:
eval('changeColor();');
所以,现在的DOM。当你给某个属性赋值时,右边的是一个字符串(不是真正的javascript)。因为它是一个字符串,幕后系统只能做类似eval()
的事情。
主要的问题是,在html的情况下,你写属性内的东西是而不是 JavaScript,而只是一个字符串。在运行时获取并转换为javascript的字符串。
而且回答你最后一个问题:“为什么?HTML属性syntax(onMouseOver="changeColor;")
是不允许的”,以及在技术上它是允许的。但它等效于在javascript中执行此操作:
onMouseOver = function(){
eval('changeColor;');
}
这显然不能完成很多操作。