如何全局访问本地功能

时间:2017-11-22 13:19:47

标签: javascript

我想从全局函数调用本地函数,但出现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函数,这是一个重要函数,这就是我想要的原因使其成为本地的,以便客户端无法访问

3 个答案:

答案 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。:请注意,这不是最安全的方法,因为任何人都可以查看客户端源代码并进行修改。最好的想法可能是在服务器上进行验证。