Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的块级作用域访问_Javascript - Fatal编程技术网

JavaScript中的块级作用域访问

JavaScript中的块级作用域访问,javascript,Javascript,我知道你会认为这是一个重复,但我从许多相关的帖子中发现,人们在每个帖子中都充斥着未受过教育的“不”,我很高兴这里还没有出现这种情况。无论如何,我想重新开始讨论 例如,让我们以“未知”语句为例: function foo() { var bar = 5; if(true) { let bar = 10; alert(bar); } alert(bar); } 此功能将首先警告10,然后警告5 这是因为bar=5位于功能级

我知道你会认为这是一个重复,但我从许多相关的帖子中发现,人们在每个帖子中都充斥着未受过教育的“不”,我很高兴这里还没有出现这种情况。无论如何,我想重新开始讨论

例如,让我们以“未知”语句为例:

function foo()
{
    var bar = 5;

    if(true)
    {
        let bar = 10;
        alert(bar);
    }

    alert(bar);
}
此功能将首先警告
10
,然后警告
5

这是因为
bar=5
位于功能级别范围,而
bar=10
的重新分配仅保留在块级别范围内,这要感谢我们的小伙伴
let

话虽如此,JavaScript中肯定存在块级作用域,但我们如何访问它呢

例如:

var arr = [
    {
        label: "x"
    },
    {
        label: "y"
    },
    {
        label: "z"
    },
];

var randIdx = Math.floor(Math.random() * 3);

for(var i = 0; i < arr.length; i++)
{
    if(i === randIdx)
        arr[i].value = true;
    else
        arr[i].value = false;
}

function foo()
{
    if(arr[0] || arr[1] || arr[2])
    {
        alert((\*passing argument*\).label);
    }
}

foo();
var-arr=[
{
标签:“x”
},
{
标签:“y”
},
{
标签:“z”
},
];
var randIdx=Math.floor(Math.random()*3);
对于(变量i=0;i
必须能够访问当前
if
语句的块范围,并检索给定表达式的传递参数块级范围确实存在,为什么我不能修补它呢


谢谢

不,这是不可能的。定义为

生产IfStatement:
if
Expression
语句 评估结果如下:

  • 让exprRef作为计算表达式的结果
  • 如果((exprRef))为false,则返回(正常、空、空)
  • 返回求值语句的结果
  • 如您所见,GetValue(exprRef)的结果没有存储在任何地方,因此您以后无法检索它

    取而代之的是,将条件表达式赋值给变量:

    var-myVar;
    if(myVar=SomeFunction()){
    myVar;//由`SomeFunction'返回的值`
    }
    
    var-myVar;
    如果(myVar=(x | | | y | | z)){//为清晰起见添加了括号
    myVar;/`x`、`y`或`z`
    }
    
    不,不可能。定义为

    生产IfStatement:
    if
    Expression
    语句 评估结果如下:

  • 让exprRef作为计算表达式的结果
  • 如果((exprRef))为false,则返回(正常、空、空)
  • 返回求值语句的结果
  • 如您所见,GetValue(exprRef)的结果没有存储在任何地方,因此您以后无法检索它

    取而代之的是,将条件表达式赋值给变量:

    var-myVar;
    if(myVar=SomeFunction()){
    myVar;//由`SomeFunction'返回的值`
    }
    
    var-myVar;
    如果(myVar=(x | | | y | | z)){//为清晰起见添加了括号
    myVar;/`x`、`y`或`z`
    }
    

    No。但是你可以很容易地先将条件的结果赋给一个变量。是的,我当然可以@FelixKling,但这不是重点。我不是在试图解决分配变量的问题,我是在问一个问题。当然,正如我所说的,你想要的是不可能的,所以你必须寻找尽可能接近你想要的东西(或者顺其自然)。我只是觉得指出替代方案比简单地说“不”更有价值。。。“你不这么认为吗?”费利克斯克林-哇-哇-哇,放松点,巴德。哈哈,我问的是这是否可能,而不是什么是接近做到这一点。“是”可以用一个解释,但“不”也可以用“不”来解释。我知道如何解决这个问题,这不是我要问的--让它成为——:)或者我们可以编辑我们的评论来打乱时间线,但是,是的,这是一个很好的观点。只是你听起来很咸…好吧。然后简单地忽略其他建议,但让未来的读者从中获益:)不。但是你可以很容易地首先将条件的结果分配给一个变量。是的,当然我可以@FelixKling,但这不是重点。我不是在试图解决分配变量的问题,我是在问一个问题。当然,正如我所说的,你想要的是不可能的,所以你必须寻找尽可能接近你想要的东西(或者顺其自然)。我只是觉得指出替代方案比简单地说“不”更有价值。。。“你不这么认为吗?”费利克斯克林-哇-哇-哇,放松点,巴德。哈哈,我问的是这是否可能,而不是什么是接近做到这一点。“是”可以用一个解释,但“不”也可以用“不”来解释。我知道如何解决这个问题,这不是我要问的--让它成为——:)或者我们可以编辑我们的评论来打乱时间线,但是,是的,这是一个很好的观点。只是你听起来很咸…好吧。然后简单地忽略其他建议,让未来的读者从中获益:)呃。。。这确实是一个合适的答案,但它仍然。。。我不知道。。。不是我想要的。我希望通过保留字或其他方式从语句中访问参数。就像函数中的
    参数
    一样,没有指定的参数。@WebWander:如果你真的想这样做,那么你必须创建自己的JS方言(编译成JS)。但在“普通”JS中有可能吗?不。真的@slebetman和有趣的想法FelixKling,但我仍然会保持我的希望。我经常遇到一些人,他们对语言了解得很透彻,这是其他人都没有想到的。我先把这个问题留待一会儿,然后回答“不”。可能性太大了,我不能不抱太大的希望。不要抱太大的希望。在我和FelixKing之间,你有99%的javascript知识。如果Bergi发表评论,那么你几乎有100%@weblower的便条介绍