I was testing a piece of code. I had a function named write
, and I used a button with the inline onclick
handler to run write()
.
function write(text) {
alert(text)
}
<button onclick='write("Some text")'>
Write
</button>
To my surprise, write()
actually executed document.write()
. To be sure, I tested it with a few more functions.
function write(text) {
alert(text)
}
<button onclick='console.log(body)'>
document.body
</button>
Then, I wondered if they could access window
. It turned out that they can. But, document.window
is undefined
.
console.log(document.window)
/*
Note that this example may not work due to StackSnippets using iframes
*/
<button onclick='window.open()'>
Open blank page
</button>
function doSomething(text) {
console.log(text)
}
<button onclick='doSomething("Some text")'>
doSomething
</button>
So, my question is, why can inline event handlers access properties of window
, even though document
is the global scope, and document.window
is undefined
?