【问题标题】:Can't access variable in JavaScript function scope无法访问 JavaScript 函数范围内的变量
【发布时间】:2016-05-12 21:47:09
【问题描述】:

我有这样的情况:

console.log(someVar) // <- works, the variable is defined
var somefunction = function () {
    console.log(someVar); 
}

somefunction(); // <- someVar is undefined on the console

我无法演示一个简单的模型来说明这一点,因为我什至不知道这怎么可能。如果someVar是在定义someFunction的上下文中定义的,那么someVar不也在someFunction的范围内吗?

在某些情况下它应该像这样工作吗?如果是这样,我可能不小心撞到了一个。

【问题讨论】:

  • 你不应该返回任何东西 - 你没有返回方法。你只是在记录一个未定义的变量。
  • “我无法展示一个简单的模型来展示这一点,因为我什至不知道这怎么可能。” — 您显然有一些代码可以证明这一点。 Reduce it 直到它构成一个合理的测试用例。
  • 好吧,我用错了词。这与问题几乎没有关系。
  • @AdamHolder — 由于该函数实际上确实 return undefined,因此非常相关。
  • @AdamHolder — 再次重申:如果您提供适当的测试用例,那么人们可以提供帮助。如果您向我们展示了有效的代码但声称它不起作用,那么我们就无能为力了。

标签: javascript scope


【解决方案1】:

named 的变量以一种不明显的方式在函数中被隐藏得更远。

【讨论】:

    【解决方案2】:

    JS

    var somefunction = function () {
        var somevar = "foo";
        return somevar;
    }
    
    alert(somefunction());
    

    Fiddle

    【讨论】:

    • OP 已经澄清,他们的意思是函数内部的 console.log() 语句没有得到正确的值,而不是它与实际返回数据有任何关系。事实上,他们在您提交此答案前三分钟就这样做了。
    • 它正在返回正确的数据。 OP 从未在他的示例中定义变量。问题是关于范围。上面的解决方案演示了如何在他检查输出时确定他的对象的范围并获得 undefined 以外的东西。
    • 问题表明,虽然变量是在代码剪切开始之前在某处定义的,但它必须已经定义(因为否则第一个 console.log 将输出未定义)。所以问题不在于它没有被定义。
    • 因此问题在于没有提供足够的来源并且没有正确地措辞问题。 OP 得到不完整或错误的答案。
    • 理论上他们应该得到接近的投票而不是糟糕的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多