讓我們先看看純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;');
}
這顯然不能完成很多操作。