今天有人告诉我,没有括号也可以调用函数。我能想到的唯一方法是使用apply或call这样的函数。
f.apply(this);
f.call(this);
但是这些需要在apply和call上加上括号,让我们回到原点。我还考虑了将函数传递给某种事件处理程序,如setTimeout:
setTimeout(f, 500);
但问题就变成了“如何在没有括号的情况下调用setTimeout ?”
那么这个谜语的答案是什么呢?如何在Javascript中调用函数而不使用括号?
今天有人告诉我,没有括号也可以调用函数。我能想到的唯一方法是使用apply或call这样的函数。
f.apply(this);
f.call(this);
但是这些需要在apply和call上加上括号,让我们回到原点。我还考虑了将函数传递给某种事件处理程序,如setTimeout:
setTimeout(f, 500);
但问题就变成了“如何在没有括号的情况下调用setTimeout ?”
那么这个谜语的答案是什么呢?如何在Javascript中调用函数而不使用括号?
当前回答
你可以使用getter和setter。
var h = {
get ello () {
alert("World");
}
}
运行这个脚本只需:
h.ello // Fires up alert "world"
编辑:
我们甚至可以争论!
var h = {
set ello (what) {
alert("Hello " + what);
}
}
h.ello = "world" // Fires up alert "Hello world"
编辑2:
你也可以定义可以不带括号运行的全局函数:
window.__defineGetter__("hello", function() { alert("world"); });
hello; // Fires up alert "world"
还有论点:
window.__defineSetter__("hello", function(what) { alert("Hello " + what); });
hello = "world"; // Fires up alert "Hello world"
免责声明:
正如@MonkeyZeus所说:永远不要在生产中使用这段代码,不管你的意图有多好。
其他回答
Array.constructor`alert\x28"invoke with whatever u want"\x29```;
因为数组。构造函数是一个函数对象。当Function对象被调用时,它们返回一个函数,它的主体是它得到的参数。
下面是一个特定情况的例子:
window.onload = funcRef;
尽管该语句实际上没有调用,但将导致未来的调用。
但是,我认为灰色区域对于这样的谜语来说是可以的:)
你可以使用getter和setter。
var h = {
get ello () {
alert("World");
}
}
运行这个脚本只需:
h.ello // Fires up alert "world"
编辑:
我们甚至可以争论!
var h = {
set ello (what) {
alert("Hello " + what);
}
}
h.ello = "world" // Fires up alert "Hello world"
编辑2:
你也可以定义可以不带括号运行的全局函数:
window.__defineGetter__("hello", function() { alert("world"); });
hello; // Fires up alert "world"
还有论点:
window.__defineSetter__("hello", function(what) { alert("Hello " + what); });
hello = "world"; // Fires up alert "Hello world"
免责声明:
正如@MonkeyZeus所说:永远不要在生产中使用这段代码,不管你的意图有多好。
这是另一个例子,我传入函数1然后传入无参数的函数,它被称为。
function one() {
console.log("one called");
}
function two() {
return new Promise((resolve, reject) => {
resolve();
});
}
two().then(one);
在ES6中,你有所谓的标记模板文字。
例如:
函数foo(val) { console.log (val); } foo '标记模板文字';