我想从全局函数调用本地函数,但出现foo is not defined
错误。什么是正确和安全的方法,因为我可能会发送一个json对象。
(function() {
function foo(js) {
// codes ....
console.log(js);
}
})();
function bar(result, validation) {
if (validation) {
// just call the function
foo(result);
}
}
上述方法旨在从Popup window获取值。
弹出窗口中按钮的onclick事件:
// ...
btn.onclick = function(x) {
try {
window.opener.bar(x.value, variablePassed);
} catch (err) {
alert("an error occured.");
console.log('err', err);
}
window.close();
return false;
}
上面的代码块将2个值传递给bar
函数,在bar
函数中,我只想将一个值传递给foo
函数,这是一个重要函数,这就是我想要的原因使其成为本地的,以便客户端无法访问
答案 0 :(得分:2)
你不能。这首先是编写私人功能的重点。
如果你想从外面调用它,你必须做某事以将函数暴露给更广泛的范围。 (即停止私有)。
例如:
var foo = (function() {
function foo(js) {
// codes ....
console.log(js);
}
return foo;
})();
查找揭示模块模式,了解处理从这样的闭包中暴露多个事物的方法。
答案 1 :(得分:0)
你可以使用"这个"并设计你的范围功能
(function() {
this.foo = (js) => {
// codes ....
console.log(js);
}
})();
答案 2 :(得分:0)
警告:其他答案基本上是将该功能公开。
如果您想将其保密,则必须在bar
可见的范围内定义foo
,然后通过分配或返回将其提供给外部。例如:
const bar = (function() {
function foo (js) {
// codes ....
console.log(js);
}
function bar (result, validation) {
if (validation) {
// just call the function
foo(result);
}
}
return bar;
})();
在这种情况下,bar
将保留对foo
的引用,并且可以调用它,但没有其他功能可以访问它。您可以在任何地方调用它:
bar(result, validation); // This will run `foo` inside it's body.
ps。:请注意,这不是最安全的方法,因为任何人都可以查看客户端源代码并进行修改。最好的想法可能是在服务器上进行验证。