>웹 프론트엔드 >JS 튜토리얼 >javascript MDN의 let 및 var 예제 이해

javascript MDN의 let 및 var 예제 이해

黄舟
黄舟원래의
2017-03-20 14:37:261660검색

이것은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.