2012-03-27 2 views
3

В 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], но вызываемый обесценивается и не будет работать в большинстве современных браузеров.

Есть ли способ установить переменную, равную функции с аргументами без с использованием оболочки?

ответ

3

Вы можете использовать метод bind, чтобы исправить некоторые параметры

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

Однако это не работает в IE < = 8, поэтому вам придется использовать аналогичную замену или полифильм в этом случае.

+0

+1 на самом деле, отвечая на мой вопрос, а не с помощью корпуса. – Holtorf

4

Не можете ли вы использовать вложенную анонимную функцию для этого?

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

Назвать это дает желаемый результат:

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

Вы можете вернуть функцию, как:

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

var x = SayMyName('bob'); 
x(); 
0
var name = (function sayMyName(name) { 
    return alert('My name is: ' + name); 
}); 
name('Mike');​​​​​ 
0
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; 
    } 
}