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

时间:2012-03-27 03:15:16

标签: javascript

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

variable = function () { alert("My name is bob"); };

或者像这样:

function SayMyName() {
   alert("My name is bob");
}
variable = SayMyName;

您还可以使用如下参数包含函数:

function SayMyName(name) {
   alert("My name is "+ name);
}
variable = function () { SayMyName("bob"); };

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

function SayMyName(name) {
   alert("My name is "+ name);
}
variable = SayMyName("bob");

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

有没有办法设置一个变量等于带有参数而没有使用机箱的函数?

5 个答案:

答案 0 :(得分:5)

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

var variable = function(name) {
  return function() {
    alert('My name is ' + name);
  };
};

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

var test = variable('bob');
test(); // Alerts "My name is bob"

答案 1 :(得分:4)

您可以使用bind方法修复某些参数

var variable = SayMyName.bind(null, "bob");

但是,这在IE< = 8中不起作用,因此在这种情况下你必须使用类似的替换或polyfil。

答案 2 :(得分:0)

您可以返回一个功能,例如:

function SayMyName(x) { return function() { alert("My name is Bob.");}};

var x = SayMyName('bob');
x();

答案 3 :(得分:0)

var name = (function sayMyName(name) {
    return alert('My name is: ' + name);
});
name('Mike');​​​​​

答案 4 :(得分:-1)

public class ToyProgram{

    public static void main(String[] args){
        String funcCallVar = aFunc();
        System.out.println(funcCallVar);
    }
    public static String aFunc(){
        String aVariable = "yes you can set a variale equal to a function";
        return aVariable;
    }
}