我決不是一個帶JavaScript的古魯,所以如果這個問題聽起來像「初學者」,我很抱歉。但爲什麼如果我在一個項目中有3個JavaScript文件,這3個JavaScript文件中的任何一個都可以調用其他JavaScript文件中的其他函數?
更大的問題是如何停止?一個例子是,如果這3個假設的JavaScript文件中,只是說他們被命名爲ManagerJS.js,TeamAJS.js和TeamBJS.js,我不希望TeamAJS能夠訪問TeamBJS,但我希望他們都是能夠訪問ManagerJS。爲什麼外部JavaScript文件可以訪問其他外部JavaScript文件功能以及如何停止它?
1
A
回答
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?
+0
感謝方向 – Chris
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
相關問題
- 1. 使私人功能可以訪問外部文件
- 2. 我可以禁止外部可執行文件內容(外部javascript)嗎?
- 3. 調用外部JavaScript文件的功能
- 4. 從外部文件訪問功能bash
- 5. 外部JavaScript文件問題
- 6. 外部JavaScript文件問題
- 7. 閱讀MIPS外部文件,以便其他文件可以使用它?
- 8. 從外部Javascript文件訪問數據
- 9. 無法從外部文件訪問的JavaScript功能
- 10. 外部JavaScript文件
- 11. Javascript外部文件
- 12. 如何從php文件中訪問外部JavaScript文件
- 13. 如何從其他範圍訪問小部件及其功能?
- 14. 我可以在PHP文件中引用外部JavaScript文件嗎?
- 15. 停止內部JavaScript等待外部Javascript
- 16. 如何從角度2組件訪問外部JavaScript文件
- 17. javascript訪問數組以外的功能
- 18. 訪問功能以外的JavaScript變量
- 19. 訪問外部JavaScript
- 20. T4MVC與外部JavaScript文件
- 21. Javascript編輯外部文件
- 22. Javascript prettyPrint外部java文件
- 23. 外部JavaScript文件提取?
- 24. JavaScript的外部intellisense文件?
- 25. Javascript - 多個外部文件
- 26. 引用外部JavaScript文件
- 27. 調用外部JavaScript文件
- 28. D3js外部JavaScript文件
- 29. 爲其他頁面預加載外部文件(CSS,JavaScript)
- 30. 外部訪問文件架
的例子爲每頁燎共享全局範圍。您可以通過不在全局範圍內定義內容來阻止訪問。您可以使用IIFE爲每個腳本創建一個專用範圍。搜索「顯示模塊模式」。 –
IIFE:https://en.wikipedia.org/wiki/Immediately-invoked_function_expression – ceejayoz
重複。見http://stackoverflow.com/a/111111/6326441 –