2012-12-21 4 views
5

Я хотел бы использовать встроенную функцию с аргументами для установки переменной. Вот сводились версия (которая, видимо, только псевдо-код в этой точке), что я пытаюсь:Передача аргументов в встроенную функцию

var something = 10; 

var something_else = 15; 

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(); 

В этом случае, «dynamic_value» должно быть «у». Проблема в том, что переменные «something» и «something_else» никогда не видны внутри этой встроенной функции.

Как вы отправляете аргументы встроенной функции?

Редактировать: Я использую jquery, хотя это может и не применяться к этому вопросу.

ответ

13

Отправляйте их в при вызове функции

var dynamic_value = (function(something, something_else) { 
    ... 
})(value_for_something, value_for_something_else); 
+0

Ооооооооооооооооооооооооооооооо и те, что параны переходят в параны функции. Это работает. Спасибо! – Ben

+1

Вызов такой функции, как вызов любой другой функции. Синтаксис выглядит немного странно, но это действительно не так. –

5

Вам нужно будет назвать это так.

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(something,something_else); 

Причина этого заключается в том, когда вы определяете те же имена в параметре функции, они являются только имена параметров, переменные не вставляются там. Последняя строка - это вызов функции, в которой передаются фактические переменные.

Кроме того, вы только что создали закрытие. Закрытие имеет доступ ко всем переменным, объявленным в функции, которая содержит его. Еще один интересный факт в этом коде состоит в том, что переменные, определенные на уровне поддерживающих функций, затеняются переменными, которые являются частью функции закрытия. Причина очевидна: имена переменных в закрытии совпадают с именами переменных в содержащей функции.

0

Я собираюсь предположить, что вы хотите, чтобы вы использовали dynamic_value, чтобы просто привязать его к something, но не к something_else.

var base_value = 10; 

var something_else = 15; 

var dynamic_value = (function(base_value){ 
    return function (compare) { 
     if(base_value == compare){ 
      return "x"; 
     } else { 
      return "y"; 
     } 
    }; 
})(base_value); 

alert(dynamic_value(something_else)); // "y" 
alert(dynamic_value(10)); // "x" 
Смежные вопросы