将状态推送到页面历史记录,然后用它替换现有状态

时间:2017-08-18 22:50:31

标签: javascript

我发现这18行Javascript代码据我所知,将状态推送到内存,然后将其替换为另一个现有状态,以便网页的DOM内容会发生变化。该代码用于直接从PHP替换用AJAJ加载的数据(假设setTimeout和setInterval没有帮助改变它)。

var run = (run)=> {
   // insert your code here
};

var pS = window.history.pushState;
var rS = window.history.replaceState;

window.history.pushState = (a, b, url)=> {
    run(url);
    pS.apply(this, arguments);
};

window.history.replaceState = (a, b, url)=> {
    run(url);
    rS.apply(this, arguments);
};

})();

第16行(unrecoverable syntax error)中有一个};。为什么会这样?作为一个JS新手,我没有一点点想法 - 我读了关闭闭包并尝试阅读代码大约4次,但没有认识到闭包有什么问题,我试图寻找语法错误或关键字/名称/语法中的拼写错误,但没有找到任何错误。

我认为代码的逻辑存在问题,而且在我的学习阶段,我认为我缺乏足够的知识来找到问题。

1 个答案:

答案 0 :(得分:3)

最后一行的})未与开场{(配对。

我的结论:

  1. 他们被错误地放在那里
  2. 您没有包含整个文件/代码
  3. 或者他们是IIFE (立即调用函数表达式)的一部分缺少其开头
  4. 我假设 3号,并为 3号提供解决方案

    (function(){
        var run = (run)=> {
           // insert your code here
        };
    
        var pS = window.history.pushState;
        var rS = window.history.replaceState;
    
        window.history.pushState = (a, b, url)=> {
            run(url);
            pS.apply(this, arguments);
        };
    
        window.history.replaceState = (a, b, url)=> {
            run(url);
            rS.apply(this, arguments);
        };
    
    })();
    

    正如您在第1行上看到的那样,我添加了(function(){以匹配右括号和括号