我已經知道,在event handler content attribute中,範圍被元素遮蔽。爲什麼事件處理程序能夠劫持我直接調用eval?
因此,在下面的代碼片段中,(1,eval)
解析爲按鈕的自定義eval
屬性,所以背景變爲綠色而不是紅色。
document.querySelector('button').eval = function(){ return 'green'; };
<button onclick="document.body.style.background = (1,eval)('red')">Click me</button>
此行爲的getting the current value of the event handlerstep 10定義,是有道理的。
但在下面的代碼片段中,我使用了一個名爲eval
的引用,所以它應該直接調用本地eval
。然而,被叫功能按鈕的定製eval
,就好像它是一個間接調用:
document.querySelector('button').eval = function(){ return 'green'; };
<button onclick="document.body.style.background = eval('red')">Click me</button>
有EVAL之間'(),真的沒有太大的區別''(1,EVAL)()' – Pointy
@Pointy'(1,EVAL)()'始終是一個間接調用和'eval()'通常是直接調用。 – Oriol
好的,你說的是奇怪的「它真的是'eval'」規則。得到它了。不過,在這種情況下,符號'eval'將是本地的,這當然是你的答案。 – Pointy