是否可以在Javascript中创建外部闭包
Is it possible in Javascript to create an external closure?
>通常,要创建闭包,请在另一个函数中创建它,它获取其父级的作用域:
var parent = function(){
var a = "works!";
var subfunction(){
console.log(a); // "works!"
}
subfunction();
}
我正在尝试找出一种方法来模拟这种闭包行为,该函数是在父函数之外定义的函数。我知道使用参数可以:
var parent = function(){
var a = "hello";
subfunction(a);
}
var subfunction(a){
console.log(a); // works, but because it's a param
}
我试图弄清楚是否有办法做到这一点,而无需显式设置所有参数。我最初认为我能够将函数本地范围对象作为参数传递
var parent = function(){
var a = "hello";
subfunction(localScope);
}
var subfunction(localScope){
console.log(localScope.a); // not going to work this way
}
。但后来我发现不可能引用函数的作用域。有没有其他方法可以模拟函数实际范围之外的闭包?
不,JS中的闭包总是词法的(即引用它们的父作用域)。
如果你想创建一个具有显式设置环境的闭包,你当然可以使用一个辅助函数:
function unrelated() {
var closure = makeClosure("hello");
closure();
}
unrelated();
function makeClosure(a) {
return function() { // closes only over `a` and nothing else
console.log(a);
}
}
这与您将接近"外部关闭"一样接近。请注意,您只能将值传递给makeClosure
,而不能传递给局部变量的引用。当然,你可以制作对象并将引用传递给它们,并且使用with
(不推荐!),你甚至可以使它们看起来像变量。
相关文章:
- 使用外部数据创建仪表板(谷歌电子表格)-JavaScript
- Javascript:获取“;FORM”;它是在.html到外部.js文件中创建的
- 正在创建网页,并希望将外部链接调用为html和css
- 为在新窗口中打开外部链接创建异常
- 为在外部单击时关闭的库图像创建预览效果
- 如何设置外部javascript创建的iframe的位置
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- 从外部 js 脚本创建元素并插入到 html 中
- 如何在外部文件中创建选择菜单并将其嵌入到html中以显示菜单
- 从外部xml文件创建标记
- 是否可以在Javascript中创建外部闭包
- 如何在 html5 中创建外部数据源
- 如何为日期选择器创建外部javascript和外部css文件,以及如何在eclipse中使用它
- 如何为可以在任何页面中使用的弹出过程创建外部js文件
- 创建外部Javascript库
- 创建外部JavaScript文件,并在HTML5画布上调用它
- 如何在导航栏中创建外部链接?(HTML)
- 如何绑定事件"pageshow"使用JQuery Mobile创建外部HTML文件
- 如何为用户创建外部javascript代码,如Google Analytics JS代码
- 从 splunk 事件查看器创建外部链接