Rumah  >  Artikel  >  hujung hadapan web  >  对于javascript MDN中let和var范例的认识

对于javascript MDN中let和var范例的认识

黄舟
黄舟asal
2017-03-20 14:37:261585semak imbas

这是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有结果输出而不是error.

但是一般情况下我们还是用常用的模式去定义一个构造函数。这个范例是为了特地讲let 和 var区别才写出的。所以没有代表性。 
在常用的模式之下,是看不出let 和 var的区别的,他们都是构造函数的私有变量且作用域相同。

Atas ialah kandungan terperinci 对于javascript MDN中let和var范例的认识. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn