最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

对于javascriptMDN中let和var范例的认识

来源:懂视网 责编:小采 时间:2020-11-27 20:23:52
文档

对于javascriptMDN中let和var范例的认识

对于javascriptMDN中let和var范例的认识:这是javascript MDN的范例 目的是为了说明let作用域的问题。var SomeConstructor;{ let privateScope = {}; SomeConstructor = function SomeConstructor () { this.someProperty = "foo"; pri
推荐度:
导读对于javascriptMDN中let和var范例的认识:这是javascript MDN的范例 目的是为了说明let作用域的问题。var SomeConstructor;{ let privateScope = {}; SomeConstructor = function SomeConstructor () { this.someProperty = "foo"; pri

这是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的区别的,他们都是构造函数的私有变量且作用域相同。

文档

对于javascriptMDN中let和var范例的认识

对于javascriptMDN中let和var范例的认识:这是javascript MDN的范例 目的是为了说明let作用域的问题。var SomeConstructor;{ let privateScope = {}; SomeConstructor = function SomeConstructor () { this.someProperty = "foo"; pri
推荐度:
标签: 范例 js javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top