2016-05-12 42 views
-1

我有这样的情况:不能访问变量的JavaScript函数范围

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

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

我不能证明这显示,因为我甚至不知道这是怎么可能一个简单的模型。如果在定义someFunction的上下文中定义someVar,则不是someVar也在someFunction的范围内?

是否有这种情况下,它应该像这样工作?如果是这样,我可能意外地偶然发现了一个。

+1

你不应该返回任何东西 - 你没有返回的方法。你只是记录一个未定义的变种。 – Korgrue

+2

“我无法展示一个简单的模型,因为我甚至不知道这是怎么可能的。” - 你显然有一些代码可以证明它。 [减少它](http://stackoverflow.com/help/mcve),直到它为明智的测试案例。 – Quentin

+0

好的,我用错了词。这与问题几乎没有关系。 – AdamHolder

回答

-1

JS

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

alert(somefunction()); 

Fiddle

+0

OP已经阐明,它们意味着函数内部的'console.log()'语句没有得到正确的值,并不是它与实际返回数据有关。事实上,他们在提交这个答案之前三分钟就做到了这一点。 – Quentin

+0

它正在返回正确的数据。 OP在他的例子中从未定义过这个变量。问题是关于范围。上面的解决方案演示了如何确定对象的范围,并在检查输出时获取非未定义的内容。 – Korgrue

+0

问题显示,虽然变量是在代码剪切开始之前定义的,但它必须已经定义(因为否则第一个console.log会输出未定义的)。所以问题不在于没有定义。 – Quentin

0

命名已经以非显而易见的方式在功能上进一步下跌阴影的变量。