我正在尝试编写一个JavaScript函数,它将返回其第一个参数(函数),其所有其余参数作为该函数的预设参数.
所以:
function out(a, b) {
document.write(a + " " + b);
}
function setter(...) {...}
setter(out, "hello")("world");
setter(out, "hello", "world")();
会两次输出"你好世界".对于setter的一些实现
我在第一次尝试时遇到了操纵arguments数组的问题,但似乎有更好的方法来做到这一点.
我遇到了以下代码:
var f = function () {
var args = Array.prototype.slice.call(arguments).splice(1);
// some more code
};
Run Code Online (Sandbox Code Playgroud)
基本上,结果args是一个数组,它是arguments没有第一个元素的副本.
但我不明白究竟是为什么f的arguments(其是保持该函数的输入参数成阵列状的对象的对象)对象被传递到slice方法,以及如何slice(1)被移除第一元件(定位在索引0) .
有人可以帮我解释一下吗?
PS代码来自此部分应用程序功能
我试图在点击DOM元素时执行外部函数,而不将其包装在另一个函数中.
假设我有一个名为的函数sayHello(),如下所示:
function sayHello(){
alert("hello");
};
Run Code Online (Sandbox Code Playgroud)
要在点击时执行它,我目前必须这样做:
$("#myelement").click(function(){
sayHello();
});
Run Code Online (Sandbox Code Playgroud)
注意我被迫将单个函数调用包装在另一个函数中.我想要做的就是这样
$("#myelement").click(sayHello());
Run Code Online (Sandbox Code Playgroud)
除此之外根本不起作用.我可以避免以任何方式将单个函数调用包装在另一个函数中吗?谢谢!
.
附加信息:当我需要将参数传递给函数时,我将如何实现相同的功能?
..
附加信息:像Chris Brandsma和Jani Hartikainen所指出的那样,应该能够使用bind函数将参数传递给函数,而不必将其包装在另一个匿名函数中:
$("#myelement").bind("click", "john", sayHello);
Run Code Online (Sandbox Code Playgroud)
与sayHello()现在接受一个新的参数,因为这样的:
function sayHello(name){
alert("Hello, "+name);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用......任何想法?事件/绑定文档位于此处 谢谢!