Движок правил wb-rules 1.7
В обновлённом движке правил wb-rules присутствует ряд важных нововведений, касающихся логики написания сценариев.
Нововведения
Сценарии
Изоляция сценариев
Начиная с версии wb-rules 1.7, каждый файл сценария запускается в своём отдельном пространстве имён - контексте. Таким образом, каждый сценарий может определять свои функции и глобальные переменные без риска изменить поведение других сценариев.
Пример
В качестве примера приведём два сценария, одновременно запускаемых в движке правил. Каждый сценарий определяет глобальные переменные и функции.
В предыдущих версиях wb-rules обращение к глобальной переменной, изменяемой в нескольких файлах сценариев, может привести к неопределённому поведению. В версиях, начиная с 1.7, поведение строго определено и такое же, как будто сценарий единственный в системе.
В комментариях указан вывод команд log для ранних версий и для актуальной версии.
Сценарий 1 (rules1.js)
test1 = 42;
setTimeout(function myFuncOne() {
log("myFuncOne called");
log("test1: {}, test2: {}", test1, test2);
// раньше: test1: [либо 42, либо 84], test2: Hello
// теперь: test1: 42, test2: (undefined)
// (будет выведена ошибка выполнения: ReferenceError: identifier 'test2' undefined)
}, 1000);
Сценарий 2 (rules2.js)
test1 = 84;
test2 = "Hello";
setTimeout(function myFuncTwo() {
log("myFuncTwo called");
log("test1: {}, test2: {}", test1, test2);
// раньше: test1: [либо 42, либо 84], test2: Hello
// теперь: test1: 84, test2: Hello
}, 1000);