【问题标题】:Function containing invalid characters in its name名称中包含无效字符的函数
【发布时间】:2014-12-04 05:31:04
【问题描述】:

我试图在 Chrome 开发工具中滥用函数名称:

window["hello world"] = function () { console.log("Hello World!"); }

上面的行将创建hello world 全局函数。

它也出现在自动完成建议中:

如果我们这样调用它(hello world()),我们会得到一个语法错误,应该是这样的:

SyntaxError: Unexpected identifier

但是,我们如何不使用引号(window["hello world"]())来调用这个函数呢?

【问题讨论】:

    标签: javascript function global window-object


    【解决方案1】:

    您根本没有给函数命名。它是一个匿名函数,分配给window 对象的属性。

    由于属性名称中包含空格,因此您无法使用标识符访问它,因此唯一的方法是显式使用窗口对象。

    window["hello world"]();
    

    如果你真的想在不使用引号的情况下运行函数,那么你可以执行以下操作。请注意,这是一种不正当的黑客行为,而不是您应该在生产代码中执行的操作。

    window["hello world"] = function () { console.log("Hello World!"); }
    // No quotes for any of the code used to access the above.
    window[
        [ 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ].map(
            function (currentValue) {
                return String.fromCharCode(currentValue);
            }
        ).join(new String)
    ]();
    

    【讨论】:

    • 好主意。 :-) 请注意,这是一种不正当的 hack,而不是你应该在生产代码中做的事情。 -- 当然,一切都或多或少是个玩笑,只是为了找到这些属性名称的限制.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2020-02-04
    • 2016-12-18
    • 2017-12-04
    • 2010-11-07
    • 2020-02-26
    相关资源
    最近更新 更多