功能中的Javascript范围问题

时间:2014-03-26 06:14:02

标签: javascript

var bark = function() {
  var animals = "Dogs";
  var sound   = "Bark"
  console.log(animals + " go " + sound);
};

console.log(animals);
console.log(sound);

当我将变量记录到控制台时,没有雪茄......

ReferenceError: animals is not defined

ReferenceError: sound is not defined

5 个答案:

答案 0 :(得分:2)

这称为闭包。看一下这个article。基本上,您只编写该函数内部函数的方式可以访问这两个变量。此外,在这种情况下,您实际上没有调用函数bark,只是定义了具有树皮名称的函数。如果你这样写的话......

var bark = function() {
    this.animals = "Dogs";
    this.sound = "Bark";
}
var myBark = new bark();

然后你可以console.log结果。例如......

console.log(myBark.animals);
console.log(myBark.sound);

现在你可以看到因为这个和新的,动物和声音属于myBark的实例。你也可以这样做。

var bark = function() {
    var animals = "Dogs";
    var sound = "Bark";
    this.logInfo = function() { console.log( animals + " go " + sound ); };
    this.getAnimals = function() { return animals; };
    this.getSound = function() { return sound; };
}

通过这种方式,您现在可以关闭变量,但您可以通过这些成员函数访问它们。如果我说......

var myBark = new bark();

然后我可以打印东西并得到这样的东西......

myBark.logInfo();
console.log(myBark.getAnimals());
console.log(myBark.getSound());

答案 1 :(得分:0)

如果在函数范围之外定义变量,它应该可以工作。

答案 2 :(得分:0)

在函数块中定义的

变量仅对该函数是本地的。

在函数上方定义var animals, sound;

答案 3 :(得分:0)

var animals = "Dogs"; var sound = "Bark"的作用域为bark,因此无法在函数外使用。

答案 4 :(得分:0)

JavaScript中的变量可在当前范围或子级别范围内访问。在这里,您尝试在Parent中访问子变量,这是不可能的。

您可以通过以下方式进行验证:

var bark = function() {
  var animals = "Dogs";
  var sound   = "Bark"
  console.log(animals + " go " + sound);
};

bark();

如果您需要在功能之外登录,请尝试:

var animals,sound;
var bark = function() {
  animals = "Dogs";
  sound   = "Bark"
  console.log(animals + " go " + sound);
};
bark();
console.log(animals);
console.log(sound);

Here is fiddle demo