だから私は全体として「適切な」Javascriptプログラミングに不慣れです。私はこれまで、jQuery に少し手を加えた単純な DOM 操作にしか実際に使用したことがありません。現在、OOP などを含む Javascript でのプログラミングの完全な概念を学ぼうとしています。私は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
最初の 2 つの s がうまくいった後、関数内のプロパティの値をチェックして、スコープから外れたものがないことを確認console.log
したいと思いました。ある程度は持っていましたが(空の値を与えただけでしたが、まだ存在していました)、年齢はそうではありませんでした。Person
name
タイプミスは見当たりません。これが、この問題の原因であると私が理解できた唯一のことです。では、なぜconsole.log(name);
を与えないのReferenceError
でしょうか?
答えを知りたいだけですが、プロトタイプ、レキシカルスコープ、巻き上げなどの重要な用語を含め、根本的な問題の完全な説明をいただければ幸いです。