Javascript jQuery$。每个变量作用域

Javascript jQuery$。每个变量作用域,javascript,jquery,Javascript,Jquery,$存在范围问题。jQuery中的每个循环。如何在函数中获取全局变量以在循环中设置或至少从中传递某些内容 var some_function = function() { // false by default var something = false; $.each(array, function(key, val) { if (val == 'something') { // even if one item eva

$存在范围问题。jQuery中的每个
循环。如何在函数中获取全局变量以在循环中设置或至少从中传递某些内容

var some_function = function() {

    // false by default
    var something = false;

    $.each(array, function(key, val) { 
       if (val == 'something')
       {
         // even if one item evaluates true I need to check outside of the loop
         something = true;
       }
    });

    if (something == true)
    {
       // do something else, but always false
    }
}
因为我需要评估数组中的所有项,如果只有一项是
true
,那么在$之外做一些额外的事情。每个

更新

$(document).ready(function () {
    something(); 
    $(':radio').trigger('change');
)};
好的,这是实际的代码。它在底部警告'false',然后警告'hello'两次,好像它的顺序相反

var something = function() {   

        var q_radios = {
            'radio1'        : 'radio1_selector', 
            'radio2'        : 'radio2_selector',  
        };
        var show_me = false;

        $.each(q_radios, function(name, q_selector) {  
            $('input:radio[name=' + q_selector + ']').change(function() {  
                    show_me = true; 
                    alert('hello'); 
            }); 
        });   

        if (show_me == true)
        {
            alert('yes');
        }
        else
        {
            alert('false');
        }

};

或多或少,就是您现在所拥有的……您只需要将数据传递到函数中(通过让它接受参数)。看


我推荐本机数组迭代方法:

var something = array.some(function ( val ) {
   return val === 'something';
});

这里,
something
将是
true
如果至少有一个数组元素具有值
'something'

您尝试过吗?它应该可以正常工作。当然,每次都会失败。虽然我今天感觉有点迟钝。@wes Then
val
从来都不等于
“某物”
。你能说出什么是数组吗?你有没有调用过函数()???请发布你实际正在做的事情。这不会测试“只有一个”项目是否符合条件,但我感觉这不是OP真正想要的。如果没有,那么
.some()
是一个很好的方法,只要在第一次匹配之后没有其他需要应用的副作用。否则,可以使用
.reduce()
,或者使用
.length
使用
.map
。很好,但是如果它是一个对象呢?@DestyNova是一个类似数组的对象?你能举个例子吗?就像在问题中:{'radio1':obj1,'radio2':obj2,…}。另一个lil问题:对于数组和类似数组的对象,如何迭代副本而不直接引用实际项目?@DestyNova有一个新的
.values()
方法,它为您提供一个属性值数组,例如
obj.values()//返回[obj1,obj2,…]
,但您需要检查哪些Babel预设实现了它。您还可以转到
Object.keys(obj).some(key=>{let val=obj[key];/*像上面那样检查val*/})
。至于第二个问题,你必须先创建副本。如果对象是DOM节点,则需要克隆它们,但我认为手动克隆DOM节点并不常见。
var something = array.some(function ( val ) {
   return val === 'something';
});