Закрытие/объем JavaScript/jQuery

Взгляните на Microsoft Solver Foundation .

С его помощью вы можете написать такой код:

  SolverContext context = SolverContext.GetContext();
  Model model = context.CreateModel();

  Decision a = new Decision(Domain.Real, "a");
  Decision b = new Decision(Domain.Real, "b");
  Decision c = new Decision(Domain.Real, "c");
  model.AddDecisions(a,b,c);
  model.AddConstraint("eqA", -44.3940 == 50*a + 37*b + c);
  model.AddConstraint("eqB", -45.3049 == 43*a + 39*b + c);
  model.AddConstraint("eqC", -44.9594 == 52*a + 41*b + c);
  Solution solution = context.Solve();
  string results = solution.GetReport().ToString();
  Console.WriteLine(results); 

Вот результат:
=== Отчет службы поддержки Solver ===
Дата и время: 20.04.2009 23:29:55
Название модели: по умолчанию
Запрошенные возможности: LP
Время решения (мс): 1027
Общее время (мс): 1414
Статус завершения решения: оптимальный
Выбранный решатель: Microsoft.SolverFoundation.Solvers.SimplexSolver
Директивы:
Microsoft.SolverFoundation.Services.Directive
Алгоритм: Первичный
Арифметика: Гибрид
Цены (точные): По умолчанию
Цены (двойные) : SteepestEdge
Основа: Slack
Pivot Count: 3
=== Детали решения ===
Цели:

Решения:
a: 0.0785250000000004
b: -0.180612500000001
c: -41.6375875

5
задан magenta placenta 24 November 2009 в 18:57
поделиться

4 ответа

Метод setInterval будет запущен в области видимости окна, поэтому функция кроссфейда там не существует. Вы должны создать анонимную функцию, чтобы было создано закрытие, содержащее ссылку на функцию:

cInterval = window.setInterval(function() { crossfade(); }, 5000);
7
ответ дан 18 December 2019 в 09:08
поделиться

Когда setInterval передается строка, строка оценивается в глобальной области. Это объясняет, почему перекрестное затухание не отображается при срабатывании setInterval .

setInterval также можно передать ссылку на функцию:

setInterval(crossfade, 5000);

, и в этом случае ваш код будет работать должным образом , поскольку кроссфейд виден в точке, где вы вызываете setInterval .

2
ответ дан 18 December 2019 в 09:08
поделиться

Используя setInterval ('crossfade ()', 5000); не 'не создает замыкание - он создает строку как eval () d. Вместо этого вы должны использовать функцию:

setInterval(function() { crossfade(); }, 5000);
8
ответ дан 18 December 2019 в 09:08
поделиться

Чтобы избежать загрязнения глобальной области, вы можете сделать несколько вещей:

  • Расширить jQuery, поскольку вы уже используете jQuery. (Используйте jQuery как пространство имен.)
  • Создайте единый объект для хранения ваших методов. (Создайте собственное пространство имен.)
1
ответ дан 18 December 2019 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: