Javascript:简化代码,困惑

时间:2013-09-13 18:15:23

标签: javascript simplify

我对HTML / CSS / PHP / MySQL有足够的了解,但Javascript对我来说仍然是一个巨大的障碍。无论出于何种原因,我的老师都希望我们简化这段愚蠢的代码,但是如何去做呢?

function f(a, b, c) {
    return function() {
        return a[b](c);
    }
}
window.onload = f(document, "write", "hi!");

我想过

function f(a, b, c) {
    return a[b](c);
}
window.onload = f(document, "write", "hi!");

但它不能简单地这么简单吧?推动正确的方向将是非常不利的!

编辑:谢谢你们。而不是给我一个推动,你已经走出了自己的方式(甚至疯狂的人,哇)为我创造这个。幸运的是,他想知道的是我将如何做到这一点,这就是今年的所有Javascript。很有责任!

6 个答案:

答案 0 :(得分:3)

我想他希望你意识到调用f会返回另一个函数。

function f(a, b, c) {
    return function() {
        return a[b](c);
    }
}

这是一个在运行时返回另一个函数的函数。所以

window.onload = f(document, "write", "hi!");

最终会像

一样
window.onload = function() { return a[b](c); }

其中abc绑定到您传入的值。所以写一下这样的内容,但替换abc具有正确的值。它最终为return document["write"]("hi"),也可以写成return document.write("hi")。插入:

window.onload = function() {
    return document.write("hi");
}

这是等效的。

答案 1 :(得分:2)

或者只是 document["write"]("hi");

另一种方式是document.write("hi");

编辑:哎呀,忘了你需要做这个onload,

window.onload = function() {
    return document.write("hi");
}

答案 2 :(得分:2)

也许他只是想着

window.onload = function() {
    document.write("hi");
};

(这是一个愚蠢的例子,等待页面加载只是用“hi”覆盖它。)

答案 3 :(得分:2)

这或许?

window.onload = document.write.bind(document, 'hi!');

答案 4 :(得分:2)

您提出的解决方案不起作用:document.write将在调用f时立即运行,而不是响应load事件。原始函数f实际上返回一个新函数;您的示例立即调用函数并返回结果。

如果查看MDN page on window.onload,您会看到onload应设置为函数:

window.onload = function() {
  init();
  doSomethingElse();
};

很明显代码应该document.write一条消息,所以将代码放在onload函数处理程序中。你会得到更短(但更不那么抽象)的代码来达到同样的效果。

答案 5 :(得分:1)

我非常确定你的导师想要保持函数抽象,也就是说,没有嵌入其中的值。这样你就可以将任何对象,方法和值传递给它,它会起作用。你的非常接近。其他人提请注意一些问题。如果您希望代码在页面加载时执行,这应该有效:

function f(a, b, c) {
    a[b](c);
}
f(document, "write", "hi!");

您可以保留onload处理程序,但请注意它将完全覆盖现有文档。也许这个家伙想要那个。但这听起来很愚蠢。这看起来像这样:

function f(a, b, c) {
    a[b](c);
}
window.onload = function () {
    f(document, "write", "hi!");
};