被Javascript变量范围困惑

时间:2012-02-22 17:22:04

标签: javascript

我发现自己是通过Javascript的变量范围,有人可以向我解释为什么第一个例子不起作用但第二个例子不起作用?

function test() {
  return typeof(the_variable) !== 'undefined' && the_variable;
}

(function () {
   var the_variable = "doesn't work";
   console.log(test());
}());

var the_variable = "does work";
console.log(test());

输出我的日志:

false
does work

此外,我想知道如何做与第一个例子类似的事情,

干杯,戴夫。

2 个答案:

答案 0 :(得分:6)

在评论中解释:

function test() {
  return typeof(the_variable) !== 'undefined' && the_variable;
}

// The variable in this function is scoped to the anonymous function.
// It doesn't exist outside that function, so `test` cannot see it
(function () {
   var the_variable = "doesn't work";
   console.log(test());
}());

// This variable exists in a scope that wraps the `test` function, so it can see it.
var the_variable = "does work";
console.log(test());

答案 1 :(得分:0)

在Javascript中,函数定义范围。在您的第一个示例中,the_variable超出了test的范围。另一方面,在第二个示例中,the_variable在全局范围内定义,并且随处可用。

修改

如果您希望the_variable可以使用test,请在句子中抓住var foo = (function () { var the_variable = "does work"; function test() { return typeof(the_variable) !== 'undefined' && the_variable; } return {test : test}; }()); console.log(foo.test());

{{1}}

输出:

有效吗