Can';JavaScript函数作用域中的t access变量

Can';JavaScript函数作用域中的t access变量,javascript,scope,Javascript,Scope,我的情况是这样的: console.log(someVar) // <- works, the variable is defined var somefunction = function () { console.log(someVar); } somefunction(); // <- someVar is undefined on the console console.log(someVar)/JS var somefunction = function ()

我的情况是这样的:

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

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

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

alert(somefunction());

名为的变量在函数中以不明显的方式被进一步隐藏

您不应该返回任何内容-您没有返回方法。您只是记录了一个未定义的变量。“我无法演示一个简单的模型来显示这一点,因为我甚至不知道这是如何实现的。”-您显然有一些代码来演示它。直到它成为一个合理的测试用例。好吧,我用错了词。这与问题几乎无关。@AdamHolder-因为函数实际上返回未定义的,所以它非常相关。@AdamHolder-再一次:如果您提供了正确的测试用例,那么人们可以提供帮助。如果您向我们展示了有效的代码,但声称它不起作用,那么我们不能做很多事情。OP已经澄清,他们的意思是函数中的
console.log()
语句没有得到正确的值,这与实际返回数据无关。事实上,他们在你提交这个答案前三分钟就这样做了。它返回了正确的数据。OP从未在他的示例中定义变量。问题是关于范围。上面的解决方案演示了如何在检查输出时确定其对象的范围并获取未定义的内容。问题表明,虽然变量是在代码截取开始之前定义的,但它必须已经定义(因为否则第一个console.log将输出未定义)。因此,问题不在于它没有被定义。因此,问题在于没有提供足够的来源,也没有正确地表述问题。OP得到的答案不完整或不好。理论上,他们应该得到接近票数的选票,而不是不好的答案。