javascript中变量的作用域-如果变量在for循环之前声明,则不应';在for循环之后是否可以访问其值?

javascript中变量的作用域-如果变量在for循环之前声明,则不应';在for循环之后是否可以访问其值?,javascript,html,Javascript,Html,我在函数中声明一些变量,它们的值在for循环中得到更新。在函数的末尾我想看到一些变量的最终值 在花了一整天的时间解释为什么我想要的事情没有发生之后,我在这里发布了这个函数以获得一些见解 在函数中,您可以看到两个alerts-第一个在for的每次迭代中运行,并给出变量的当前值。我不想要此警报,但在此处插入此警报只是为了表明代码确实执行了我希望它在for循环中执行的操作 我想要的只是最后一个警报。。。。但由于某种原因,它从未出现过 据我所知,如果一个变量是在函数的开头声明的,那么它的值可以一直访问到

我在函数中声明一些变量,它们的值在
for
循环中得到更新。在
函数的末尾
我想看到一些变量的最终值

在花了一整天的时间解释为什么我想要的事情没有发生之后,我在这里发布了这个函数以获得一些见解

在函数中,您可以看到两个
alert
s-第一个在
for
的每次迭代中运行,并给出变量的当前值。我不想要此警报,但在此处插入此警报只是为了表明代码确实执行了我希望它在
for循环中执行的操作

我想要的只是最后一个
警报
。。。。但由于某种原因,它从未出现过

据我所知,如果一个变量是在函数的开头声明的,那么它的值可以一直访问到函数的结尾。。。如果这是正确的,为什么最后一个警报没有出现

注意:这段代码是在MsWord生成的html上运行的,其中包含无数不必要的span标记,我需要先删除这些标记,然后才能将这些内容用于文档目的。无法获得这些值正是阻止我完成一个小工具的原因,我计划使用这个工具为一个项目转换大约400个MsWord页面

function uponetag()
{
    var spank=document.getElementsByTagName('span'); //look at all span tags
    var spann=spank.length; //number of span tags on the page
    var yes=0;
    var no=0;

    for (i=0; i<=spann; i++)
        {

            var spancont=spank[i].innerHTML;
            //get the parent node
            var outer = spank[i].parentNode;
            outertag=outer.tagName.toLowerCase();

            //get the inner html of the parent node
            var outercont=outer.innerHTML;
            //create a string manually placing the opening and closing span tags around the current span content
            var compareit=("<span>"+spancont+"</span>");

            //compare the manual string to inner content of the parent node
            if (outercont===compareit)
            {

                //replace the inner html of the parent node with the current span content
                outer.innerHTML=spancont;
                yes=yes+1;
            }

            else
            {
                no=no+1;
            }
            alert ("Converted = "+yes+"\n\n Not converted = "+no); //this alert works
        }
    alert ("The page originally had "+spann+" span tags. \n ON EXIT: Converted = "+yes+"\n\n Not converted = "+no);
    //THIS ALERT DOESN'T!!! WHY?????
}
函数uponetag()
{
var spank=document.getElementsByTagName('span');//查看所有span标记
var spann=spank.length;//页面上的span标记数
var yes=0;
var no=0;

对于(i=0;i读取的代码超出了数组的长度,导致错误

这就是为什么循环警报会触发,但循环外的最终警报不会触发的原因

这个环路


for(i=0;i读取的代码超出数组长度,导致错误

这就是为什么循环警报会触发,但循环外的最终警报不会触发的原因

这个环路


for(i=0;i
for(i=0;i
for(i=0;i)在firebug控制台中是否有任何错误?另外,可能需要将此更改:“for(i=0…”更改为“for(var i=0…”此答案很好地解释了原因;)嗯…@mithunsatheesh-我看到一个…..类型错误:spank[i]未定义var spancont=spank[i].innerHTML;在循环运行了大约29次后的第26行上-脚本在该时间终止…firebug控制台中出现任何错误?此外,可能希望将此更改为:“for(i=0…”到“for(var i=0…”这个答案很好地解释了原因;)嗯…@mithunsatheesh-我看到一个…..类型错误:spank[i]是未定义的var spancont=spank[i].innerHTML;在循环运行了大约29次后的第26行-此时脚本终止…我在JSFIDLE中得到了与原始代码相同的行为,并给了我一个
未捕获的类型错误:当它试图读取超出末尾的内容时,无法读取未定义的属性'innerHTML'for循环是。它在控制台中显示退出时的最终消息,没有TypeErrors。我刚刚演示了修复for循环会改变行为并修复问题。但是,如果您仍然在控制台中看到typeerror,那么也许可以尝试检查“查看源代码”在您的浏览器上,确保它接收到正确的代码,并清除您的浏览器缓存和/或停止/启动Web服务器(如果没有)。我在JSFIDLE中获得了与原始代码相同的行为,并给我一个
Uncaught TypeError:当它尝试读取未定义的
的属性“innerHTML”时无法读取结束。更正for循环后的JSFIDLE是。它在控制台中显示退出时的最终消息,没有TypeErrors。我刚刚演示了修复for循环会改变行为并修复问题。但是,如果您仍然在控制台中看到typeerror,那么可以尝试检查“查看源代码”在浏览器上,确保它接收到正确的代码,并清除浏览器缓存和/或停止/启动Web服务器(如果没有)。
for (i=0; i<=spann; i++)
//change it to :
for (i=0; i<spann; i++)