如何保持JavaScript闭包的状态?

前端之家收集整理的这篇文章主要介绍了如何保持JavaScript闭包的状态?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在开发一个迁移平台,用于将Web应用程序从设备迁移到另一个设备.我正在扩展它以添加对保留JavaScript状态的支持.
我的主要任务是创建一个表示正在执行的应用程序的当前状态的文件,将其传输到另一个设备并重新加载目标设备中的状态.

我采用的基本解决方案是导航窗口对象并使用JSON作为基本格式保存其所有后代属性以进行导出并扩展它以实现一些功能

>保留对象引用,即使是循环(dojox.json.ref库)
>支持计时器
>日期
>数组的非数字属性
>对DOM元素的引用

我现在需要解决的最重要的任务是出口封闭.此刻我不知道如何实现这个功能.
我读到了包含函数作用域链的内部EcmaScript属性[[scope]],这是一个类似于列表的对象,由函数的所有嵌套激活上下文组成.很遗憾,JavaScript无法访问它.
有人知道是否有办法直接访问[[scope]]属性?或者另一种保持闭包状态的方法

最佳答案
这听起来像是一个不可能的壮举,因为您需要访问存储在每个变量中的引用.

最好的解决方案可能是首先将代码重构为在可用对象上存储状态 – 这样您就可以轻松地使用JSON.stringify / parse来保存/恢复它.

所以来吧

var myFuncWithScope = (function() {
    var variable = 0;
    return function() {
        return variable++;
    }
})(); 

var serializedState = .... // no can do

var state = {
    myScope = {
        variable: 0
    }
};

var myFuncWithoutScope = function(){
    return state.myScope.variable++;
}

var serializedState = JSON.stringify(state);

猜你在找的JavaScript相关文章