1

我对 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。非常感谢!

4

6 回答 6

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); }

其中a, b, 和c绑定到您传入的值。所以写一些类似的东西,但是用正确的值替换a, b, and 。c它最终成为return document["write"]("hi")which 也可以被写入return document.write("hi")。插入:

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

这是等价的。

于 2013-09-13T18:26:12.943 回答
2

要不就 document["write"]("hi");

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

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

window.onload = function() {
    return document.write("hi");
}
于 2013-09-13T18:20:06.880 回答
2

This perhaps?

window.onload = document.write.bind(document, 'hi!');
于 2013-09-13T18:23:24.143 回答
2

Your proposed solution doesn't work: document.write will run immediately when f is called, rather than in response to the load event. The original function f actually returns a new function; your example immediately calls a function and returns the result.

If you look at the MDN page on window.onload, you'll see that onload should be set to a function:

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

It's obvious that the code should document.write a message, so put that code inside an onload function handler. You'll have shorter (but much less abstract) code that achieves the same effect.

于 2013-09-13T18:23:28.217 回答
2

也许他只是在想

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

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

于 2013-09-13T18:21:37.313 回答
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!");
};
于 2013-09-13T18:26:47.420 回答