0
A
回答
2
不確定你的用例是什麼。我假設你有一個包含一些函數和變量的js腳本文件,並且你想在全局中公開其中的一部分,但其餘部分保留爲腳本文件的私有文件。你可以用閉包來實現這一點。基本上你創建了一個你立即執行的函數。在函數內部放置原始代碼。然後將所需的功能導出到全局範圍中。
// Define a function, evaluate it inside of parenthesis
// and execute immediately.
(function(export) {
var myPrivateVariable = 10;
function myPrivateFunction(param) {
return param + myPrivateVariable;
}
export.myGlobalFunction = function(someNumber) {
return myPrivateFunction(someNumber);
};
})(this); // The *this* keyword points to *window* which
// is *the* global scope (global object) in a web browser
// Here it is a parameter - the *export* variable inside the function.
// This is executed in the global scope
myGlobalFunction(2); // yields 12 (i.e. 2 + 10)
myPrivateVariable; // Error, doesn't exist in the global scope
myPrivateFunction(2) // Error, doesn't exist in the global scope
1
要回答你的問題,不,因爲有在JavaScript中沒有訪問修飾符是不可能的。任何函數都可以訪問在全局範圍內聲明的變量。
正如在本答案的評論中指出的那樣,您可以創建具有私人成員的對象。 Crockford在private members in Javascript上有一個頁面。他用下面的代碼來說明他的觀點:
function Container(param) {
// private method
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
// privileged method
this.service = function() {
return dec() ? that.member : null;
};
}
在上面的例子中,PARAM,祕密,這都是私人的,因爲它們不能從外部訪問。更清楚的是,這些變量只能通過特權或私有方法訪問,區別在於可以從對象的任何實例調用特權方法。正如評論中所建議的那樣,這可以通過使用閉包來實現。
引用克羅克福德快速解釋關閉,但你可以找到大量related questions。
這意味着,一個內部函數總是可以訪問 VAR和它的外部函數的參數,外 函數返回後還是一樣。
相關問題
- 1. 通過javascript中的私有方法訪問私有變量
- 2. 製作有條件的全局變量
- 3. JavaScript中的通用方法來銷燬所有全局變量
- 4. 製作全局變量js
- 5. JavaScript中的全局變量?
- 6. Javascript中的全局變量
- 7. javascript中的全局變量?
- 8. javascript中的全局變量
- 9. 全局變量Web方法
- 10. 在Javascript中查找全局變量的最佳方法
- 11. 訪問方法中的全局變量
- 12. JavaScript全局變量
- 13. javascript - 全局變量
- 14. javascript全局變量
- 15. 全局變量,Javascript
- 16. 全局變量沒有在Javascript
- 17. Javascript中的全局和局部變量
- 18. javascript中的局部與全局變量
- 19. 在封裝內製作全局變量
- 20. 私有方法中的類變量
- 21. 全局變量是在類方法NULL
- 22. JavaScript聲明的全局變量不能分配在方法
- 23. 在變量上使用全局開關的JavaScript替換()方法
- 24. 的Javascript全局變量
- 25. 的Javascript全局變量空
- 26. 的JavaScript YUI3全局變量
- 27. 全局變量的Javascript
- 28. 具有全局範圍的JavaScript變量
- 29. 製作全局變量的問題
- 30. javascript中的全局變量無法正常工作
你是什麼意思的「私人全球變量」?你能提供一個例子嗎? –
這就像是說「全局變量不是全局的」? – Joseph
你可能想閱讀有關即時函數:http://stackoverflow.com/questions/8475578/what-is-the-reason-for-this-javascript-immediate-invocation-pattern –