이것은 javascript MDN의 예입니다.
let 범위 문제를 설명하는 것이 목적입니다.
var SomeConstructor;{ let privateScope = {}; SomeConstructor = function SomeConstructor () { this.someProperty = "foo"; privateScope.hiddenProperty = "bar"; } SomeConstructor.prototype.showPublic = function () { console.log(this.someProperty); // foo } SomeConstructor.prototype.showPrivate = function () { console.log(privateScope.hiddenProperty); // bar }} var myInstance = new SomeConstructor(); myInstance.showPublic();myInstance.showPrivate(); console.log(privateScope.hiddenProperty); // error
하지만 일반적으로 우리는 생성자를 이렇게 정의하지 않습니다.
그래서 다시 썼습니다.
function SomeConstructor() { this.someProperty = 'foo'; let privateScope = {}; privateScope.hiddenProperty = 'bar'; SomeConstructor.prototype.showPublic = function () { console.log(this.someProperty); } SomeConstructor.prototype.showPrivate = function () { console.log(privateScope.hiddenProperty); }}var myInstance = new SomeConstructor(); myInstance.showPublic(); //foomyInstance.showPrivate(); //barconsole.log(privateScope.hiddenProperty); //ReferenceError: privateScope is not defined
이렇게 변경하면 privateScope.hiddenProperty에 직접 접근할 수 없음을 알 수 있습니다.
var privateScope = {}; // 把let 换成var
그러면 결과는
console.log(privateScope.hiddenProperty); //ReferenceError: privateScope is not defined
가 되고 결과는 변하지 않은 것을 볼 수 있습니다.
생성자에서는 var이든 let이든 범위가 동일하며 모두 비공개 변수입니다.
우리는 여전히 MDN의 예제를 사용합니다. let을 var
var SomeConstructor;{ var privateScope = {}; SomeConstructor = function SomeConstructor () { this.someProperty = "foo"; privateScope.hiddenProperty = "bar"; } SomeConstructor.prototype.showPublic = function () { console.log(this.someProperty); // foo } SomeConstructor.prototype.showPrivate = function () { console.log(privateScope.hiddenProperty); // bar }} var myInstance = new SomeConstructor(); myInstance.showPublic(); myInstance.showPrivate(); console.log(privateScope.hiddenProperty); // bar
로 변경하면 console.log에 오류 대신 결과 출력이 있는 것을 볼 수 있습니다.
그러나 일반적인 상황에서는 여전히 공통 패턴을 사용하여 생성자를 정의합니다. 이 예제는 let과 var의 차이점을 설명하기 위해 특별히 작성되었습니다. 그래서 대표성이 없습니다.
일반적으로 사용되는 모드에서는 let과 var 사이에 차이가 없습니다. 둘 다 생성자의 전용 변수이며 동일한 범위를 갖습니다.
위 내용은 javascript MDN의 let 및 var 예제 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!