【发布时间】:2013-12-12 08:49:28
【问题描述】:
所以我对“正确的”Javascript 编程作为一个整体是新手。我只真正将它用于简单的 DOM 操作,并稍微涉足 jQuery。现在我正在尝试学习 Javascript 编程的完整概念,包括 OOP 等。我喜欢认为我对 JS 中的范围有所了解,但我无法理解:
function Person(name, age){
this.name = name;
this.age = age;
this.getName = function(){
return name;
}
this.setName = function(name){
this.name = name;
}
this.getAge = function(){
return age;
}
this.setAge = function(age){
this.age = age;
}
}
p = new Person("Bob", 12);
console.log(p.getName());
console.log(p.getAge());
console.log(name); //logs "an empty string" - What?
console.log(age); //logs "ReferenceError: age is not defined" - Expected
在前两个console.logs 正常运行后,我想检查Person 函数中的属性值,以确保没有任何内容超出范围。 name 在某种程度上有(只给出了一个空值 - 但仍然存在),但年龄没有。
我看不到任何拼写错误,这是我唯一能理解的导致此问题的原因。那么为什么console.log(name); 不给ReferenceError?
尽管我很想知道答案,但我非常感谢对根本问题的完整解释,包括任何关键术语,例如原型、词法范围、提升等。
【问题讨论】:
-
name是全局的,是window的属性。 -
哈!我想它可能是这样的,但我不知道。谢谢!
标签: javascript oop scope referenceerror