我试图在我的规则集的全局块中定义一个javascript函数,但是当我尝试运行该函数时,我得到'f()未定义'。
global {
emit <|
function f() { return 42 };
|>;
}
rule use_function {
select when pageview ".*"
{
emit <| result=f(); console.log("The value is "+result+"."); |>;
}
}
要使我的函数可调用,我需要做什么?
答案 0 :(得分:2)
您的代码应该正常运行。
这是另一个与你相似的例子。
ruleset a60x535 {
meta {
name "function-scope-test"
description <<
function-scope-test
>>
author "Mike Grace"
logging on
}
global {
emit <|
function showMeTheMoney() {
alert("42!");
return 42;
}
|>;
}
rule call_global_function {
select when pageview ".*"
{
emit <|
var amount = showMeTheMoney();
alert("amount: "+amount);
function cool() {
alert("yes");
}
|>;
}
}
}
使用bookmarklet在example.com上运行app的结果:
当KRL生成JavaScript以在浏览器页面上运行时,它会将代码置于闭包中,从而产生一些意外行为。在您的代码和我的示例中,发出的JavaScript在相同的范围内运行,因此函数调用可以相互访问。如果您正在查看按钮单击的JavaScript,然后调用全局块中发出的函数,则可能会遇到点击函数与全局发出的JavaScript函数不在同一范围内的问题。