在下面,从未声明变量名称。该值作为字符串“结果”返回。这不是错误的吗,应该不是“未定义”吗?
let obj = {
name: name,
age: "23"
}
alert(obj.name);
或
obj = {
name,
age: "23"
}
alert(obj.name);
这是因为JSFiddle手动将以下脚本注入every iframe:
// tell the embed parent frame the height of the content
if (window.parent && window.parent.parent){
window.parent.parent.postMessage(["resultsFrame", {
height: document.body.getBoundingClientRect().height,
slug: "n4j20xkh"
}], "*")
}
// always overwrite window.name, in case users try to set it manually
window.name = "result"
您可以通过检查结果iframe并查看正文底部的<script>
标签来查看。因此,即使您的代码从未创建过name
变量,它也已经存在于全局范围内。
请注意,window.name
will always exist,作为字符串,与站点无关,即使该站点未分配给它。
(通常,引用未初始化的变量将导致ReferenceError-not undefined
-但由于存在window.name
,因此不会引发错误。]
您只是将window.name
(在全局范围内定义的name
)设置为obj.name
:
let obj = {
name: name,
age: "23"
}
console.log(window.name);
console.log(obj.name);