是否可以在没有with(global)所有脚本默认具有的隐式上下文的情况下执行代码块?例如,在浏览器中,是否可以通过任何方式设置脚本,使诸如
const foo = location;
Run Code Online (Sandbox Code Playgroud)
抛出
未捕获ReferenceError:未定义位置
而不是访问window.location,何时location未先声明?缺少这一点,有没有办法使这种隐式引用导致某种警告?在编写代码时,它可能是错误的来源(见下文),因此有一种防范它的方法可能会很有用。
(当然,由于普通的作用域规则,可以使用const或let或在内部块中声明另一个具有相同名称的变量,以确保使用该变量名称引用的是新变量而不是global属性,但这不是一样。)
这可能类似于询问是否可以从实际 with语句中停止引用属性:
const obj = { prop: 'prop' };
with (obj) {
// how to make referencing "prop" from somewhere within this block throw a ReferenceError
}
Run Code Online (Sandbox Code Playgroud)
众所周知,with不应该首先使用它,但是不幸的是,当谈到时,我们似乎别无选择with(global),因为它偶尔会节省一些字符,但会浪费一些经常弹出的错误:1 2 3 4 5 6。例如:
const foo = location;
Run Code Online (Sandbox Code Playgroud)
(这里的问题:window.status是保留属性-分配给它时,它会将分配的表达式强制转换为字符串)
with阻止或禁止显式使用此类错误的原因相同,但with(global)即使在严格模式下,隐式错误也继续引起问题,因此找出解决方法将非常有用。
我一直在与这段简单的代码作斗争.我正在尝试用一个<button>简单的JavaScript函数来隐藏一个<div>.
HTML:
<button type="button" onclick="close('wrong')">OK</button>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function close(ID)
{
document.getElementById(ID).style.display="none";
}
Run Code Online (Sandbox Code Playgroud)
我确信这是非常简单的事情,我不能,因为我的生活,找到它.