gpt4 book ai didi

javascript - javascript 中变量的范围 - 如果在 for 循环之前声明变量,那么在 for 循环之后不应该访问它的值吗?

转载 作者:行者123 更新时间:2023-11-28 15:44:57 25 4
gpt4 key购买 nike

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

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

在函数中,您可以看到两个 alert - 第一个在 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?????
}

我已尝试了此处建议的所有更改(i=spannum、var1=.... 等),但没有成功!事实上,在执行此操作时,我发现虽然原始页面中有 49 个跨度,但脚本在运行 29 次(20 个是和 9 个否)后在 Firebug 控制台中抛出错误。

最佳答案

代码读取超出数组长度,导致错误。

这就是循环警报触发但循环外的最终警报未触发的原因。

这个循环

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

包括 i=spann,即超出末尾 1。

我认为你打算使用

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

这是正确的。

我还应该注意到,Javascript 没有 block 级变量。它有function -作用域变量。声明varfor循环 block 与声明 var 相同在当前function初始化时(称为提升)并将其设置在循环中。

关于javascript - javascript 中变量的范围 - 如果在 for 循环之前声明变量,那么在 for 循环之后不应该访问它的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22707743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com