Javascript 如何在js中保持全局变量不变

Javascript 如何在js中保持全局变量不变,javascript,google-chrome-extension,Javascript,Google Chrome Extension,这是一个Chrome扩展JS,我想比较加载的DOM和所有加载的文件之间的DOM树结构。这里我先声明两个变量,然后它将运行到这两个侦听器中。但是txt1不会将该值保留在第一个侦听器中,无论是使用var还是窗口声明它。那么,我如何保持全球价值呢?或者我可以用其他方式绕过它 function tw1(){ var treeWalker = document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,{ acceptNode:

这是一个Chrome扩展JS,我想比较加载的DOM和所有加载的文件之间的DOM树结构。这里我先声明两个变量,然后它将运行到这两个侦听器中。但是txt1不会将该值保留在第一个侦听器中,无论是使用var还是窗口声明它。那么,我如何保持全球价值呢?或者我可以用其他方式绕过它

    function tw1(){ 
    var treeWalker = document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,{ acceptNode: function(node) { return NodeFilter.FILTER_ACCEPT; } },false);

    var ar = new Array();
    var count=0;
    while(treeWalker.nextNode()) {
    ar[count]=treeWalker.currentNode.nodeName;
    count++;
    console.log(treeWalker.currentNode.nodeName);

    }

    var txt="";
    for (var i=0;i<count;i++)
    {
    txt=txt+ar[i]+i+"\t";
    }
    //console.log(txt); 
    return txt; 

    }

    function compare(str,str0)
        { 
         if(str.indexOf(str0) == 0&& str0.indexOf(str) == 0)
         {
          return 0;
         }
         else
         {
          return 1;
         }
    }

    window.txt1="";
    window.txt2="";

    document.addEventListener('DOMContentLoaded', function() {
        window.txt1=tw1();

    }, false);

    window.addEventListener('load', function() {
        window.txt2=tw1();
        console.log(window.txt1);
        console.log(window.txt2);
        if(compare(window.txt1,window.txt2)!=0)
            alert("This page is possibly malicious.");

    }, false);
函数tw1(){
var treeWalker=document.createTreeWalker(document,NodeFilter.SHOW_元素,{acceptNode:function(node){return NodeFilter.FILTER_ACCEPT;},false);
var ar=新数组();
var计数=0;
while(treeWalker.nextNode()){
ar[count]=treeWalker.currentNode.nodeName;
计数++;
log(treeWalker.currentNode.nodeName);
}
var txt=“”;

对于(var i=0;i来说,最简单的方法是添加一个检查条件

if(!window.txt1.length)
    window.txt1=tw1();

对不起,我不明白这个问题。你说的“保留全局值”是什么意思?你想让它保持为空字符串吗?另外,你在哪里定义
tw1
?@Asad tw1()是一个遍历DOM树并返回字符串的函数,我把它放在这些代码之前。在第二个侦听器中,txt1是“”,虽然第一个侦听器执行时是一个长字符串。@user1261718:发布您的所有代码。@Blender已编辑,它是整个contentscript文件。当我在第一个侦听器中选中console.log()时,为txt1分配了一个值,而当它进入第二个侦听器时,txt1返回到“”正如最初定义的那样。我检查了两个函数之间传递的一些值,例如使用window.,但它不会让第二个侦听器中的txt1在第一个侦听器中保留该值。@Sushanth--您的意思是如果(!window.txt1.length)@Sushanth我犯了一个错误,第一个tw1什么也不返回…我把第二个监听器输出中的tw1误认为是第一个监听器…要编辑它吗