全局变量是否只能在JS控制台中使用?

时间:2014-04-11 20:07:01

标签: javascript

是否可以从JS获得全局引用 控制台,但在页面上运行的其他JS不可用?

例如,我可以将变量m设置为10,以便......

<script>
    console.log(m);
</script>

ReferenceError,但来自控制台......

console.log(m);

打印10


编辑:

到目前为止,回复只涉及JavaScript中范围的基础知识,但是如果这是可能的话,那么将变量添加到只有控制台可以看到的范围(或者,我知道这不是不存在)。这是我正在寻找的一个几乎可以运作的例子:

Object.defineProperty(
    window,
    "m",
    {
        get : function window_m_getter() {
            if (CONSOLE_OPEN) {
                return 10;
            } else {
                throw new ReferenceError('m can only be used in a console');
            }
        },
    }
);

如果可以检测控制台当前是否处于打开状态it really isn't,那么此示例将起作用,但它非常接近。

这个问题的答案几乎肯定是,但这并不完全是因为范围。

1 个答案:

答案 0 :(得分:1)

没有

开发人员控制台在全局命名空间中运行。每个脚本都使用相同的名称。控制台没有私有的,不同的命名空间。

您访问console的{​​{1}}对象是此命名空间的一部分,因此可供所有人使用。

最多,您可以在log()的最后加载所有脚本后为控制台声明全局变量,使其无法运行直到所有运行完毕。但是,这不会阻止脚本从触发事件中访问它们。