如何使用匿名函数在 Javascript 中仅使某些函数和变量全局可用?
How to make only certain functions and variables available globally in Javascript using anonymous functions?
假设我有一个 html 结构为
的文件
<script>
let firstClass = new FirstClass();
var secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(secret); // should be undefined
SecondClass(); // should not be accessible
FirstClass(); // should not be accessible
</script>
如何确保 <script>
的第二部分仅提供 firstClass.init()
而不是 SecondClass()
?
我想使用匿名函数,比如;function({})();
在包含 FirstClass
、SecondClass
和 secret
且仅来自 IIFE 的 return firstClass
的 IIFE 中实例化 firstClass:
<script>
const firstClass = (() => {
const secret = 'secret';
function FirstClass() {
this.init = function() {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
return new FirstClass;
})();
</script>
<script>
firstClass.init(); // should return a value
console.log(
typeof secret,
typeof SecondClass,
typeof FirstClass
);
</script>
注意需要使用</script>
,而不是<scipt>
,调用构造函数时需要使用new
才能使用赋给[=18=的属性] 在构造函数中。
此代码段应该可以解决您的闭包需求。
<script>
(function (global) {
const secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
return this;
}
const firstClass = FirstClass();
function SecondClass() {
return 'value';
}
global.firstClass = firstClass;
})(window)
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(typeof secret); // should be undefined
console.log(typeof SecondClass); // should be undefined
console.log(typeof FirstClass); // should be undefined
</script>
假设我有一个 html 结构为
的文件<script>
let firstClass = new FirstClass();
var secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(secret); // should be undefined
SecondClass(); // should not be accessible
FirstClass(); // should not be accessible
</script>
如何确保 <script>
的第二部分仅提供 firstClass.init()
而不是 SecondClass()
?
我想使用匿名函数,比如;function({})();
在包含 FirstClass
、SecondClass
和 secret
且仅来自 IIFE 的 return firstClass
的 IIFE 中实例化 firstClass:
<script>
const firstClass = (() => {
const secret = 'secret';
function FirstClass() {
this.init = function() {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
return new FirstClass;
})();
</script>
<script>
firstClass.init(); // should return a value
console.log(
typeof secret,
typeof SecondClass,
typeof FirstClass
);
</script>
注意需要使用</script>
,而不是<scipt>
,调用构造函数时需要使用new
才能使用赋给[=18=的属性] 在构造函数中。
此代码段应该可以解决您的闭包需求。
<script>
(function (global) {
const secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
return this;
}
const firstClass = FirstClass();
function SecondClass() {
return 'value';
}
global.firstClass = firstClass;
})(window)
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(typeof secret); // should be undefined
console.log(typeof SecondClass); // should be undefined
console.log(typeof FirstClass); // should be undefined
</script>