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
答案 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);