是否可以在不使用机箱的情况下将变量设置为等于函数?

Hol*_*orf 4 javascript

在JavaScript中,您可以将变量设置为等于这样的方法:

variable = function () { alert("My name is bob"); };
Run Code Online (Sandbox Code Playgroud)

或者像这样:

function SayMyName() {
   alert("My name is bob");
}
variable = SayMyName;
Run Code Online (Sandbox Code Playgroud)

你也可以用这样的参数包含一个函数:

function SayMyName(name) {
   alert("My name is "+ name);
}
variable = function () { SayMyName("bob"); };
Run Code Online (Sandbox Code Playgroud)

但是尝试以下列方式存储变量将调用该函数,而不是将其存储为变量:

function SayMyName(name) {
   alert("My name is "+ name);
}
variable = SayMyName("bob");
Run Code Online (Sandbox Code Playgroud)

以前有一种聪明的方法可以通过使用[callee] [1]来解决这个问题,但被调用者被折旧并且不适用于大多数现代浏览器.

有没有办法在使用机箱的情况下将变量设置为带参数的函数?

Ble*_*der 5

你不能使用嵌套的匿名函数吗?

var variable = function(name) {
  return function() {
    alert('My name is ' + name);
  };
};
Run Code Online (Sandbox Code Playgroud)

调用它会产生您想要的结果:

var test = variable('bob');
test(); // Alerts "My name is bob"
Run Code Online (Sandbox Code Playgroud)