为什么外部JavaScript文件可以访问其他外部JavaScript文件函数以及如何停止它?

时间:2016-06-11 01:13:07

标签: javascript

我绝不是一个带有JavaScript的大师,所以如果这个问题听起来很开心,那么我很抱歉#34;初学者"但是为什么如果我在一个项目中有3个JavaScript文件,那么这3个JavaScript文件中的任何一个都可以调用其他JavaScript文件中的任何其他函数?

更大的问题是如何阻止这种情况?一个例子是,如果在这3个假设的JavaScript文件中,只是说它们被命名为ManagerJS.js,TeamAJS.js和TeamBJS.js,我不希望TeamAJS能够访问TeamBJS,但我希望它们都是能够访问ManagerJS。

2 个答案:

答案 0 :(得分:2)

页面上的所有脚本都在全局范围内进行评估。每页只有一个共享的全局范围。

您可以通过而不是来阻止全局范围内的内容访问。您可以使用IIFE为每个脚本创建一个私有作用域:

// myScript.js
(function() {

  // everything declared here is *local* to this function
  var localValue = 42;

  // we could expose values by explicitly creating global variables
  // (but there are other, more elaborate ways)
  window.globalValue = 21;

}());

仅公开您希望其他代码/脚本访问的值。有多种方法可以做到这一点,其中之一就是revealing module pattern

另见What is the purpose of a self executing function in javascript?

答案 1 :(得分:1)

听起来你想要使用某种依赖注入系统。有很多选择,包括CommonJS,RequireJS,ES6导入,可能还有很多其他选择。

这是CommonJS的一个例子

// in TeamAJS.js...
// gain reference to Manager script
var Manager = require('./ManagerJS')

// do things with Manager
// note: can't access TeamBJS unless you require it as a dependency

module.exports = {
    // put methods or variables in here that you wish to expose to other modules
}

RequireJS网站有a nice article on modules