首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展变量作用域

扩展变量作用域
EN

Stack Overflow用户
提问于 2020-02-20 11:43:14
回答 2查看 42关注 0票数 0

在for循环(即.each())中,如果满足某个条件,则需要将openvalue的变量设置为1。然后,我需要在循环结束时访问该变量的值。无论何种情况,当我将变量打印到控制台时,结果始终为0。我知道为什么(变量作用域),但我想知道如何修改我的代码,以便如果在forloop中将openvalue设置为1,那么该值在forloop之外将具有持久性。

代码语言:javascript
复制
var openvalue = 0; //sets default value
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        var openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

发布于 2020-02-20 11:49:58

在您的循环中,使用相同的名称声明一个新变量。相反,您希望为已声明的变量赋值。因此,"openvalue = 1“而不是"var openvalue = 1":

代码语言:javascript
复制
var openvalue = 0; //sets default value
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
    openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});

console.log(openvalue);
票数 1
EN

Stack Overflow用户

发布于 2020-02-20 11:51:10

这个问题之所以存在,是因为您使用var语句重新声明了openvalue变量,这将在新函数范围内创建第二个openvalue变量。下面是您的代码片段:

代码语言:javascript
复制
var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        var openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />

在我们的解决方案中,我们省略了第二个声明,只是引用了父作用域中的原始openvalue,我们得到了预期的行为:

代码语言:javascript
复制
var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60312591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档