首页 > web前端 > js教程 > 正文

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

黄舟
发布: 2017-03-20 14:37:26
原创
1871人浏览过

这是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 其作用域是相同的,而且都是私有变量

立即学习Java免费学习笔记(深入)”;

飞书知识问答
飞书知识问答

飞书平台推出的AI知识库管理和智能搜索工具

飞书知识问答 45
查看详情 飞书知识问答

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

以上就是对于javascript MDN中let和var范例的认识的详细内容,更多请关注php中文网其它相关文章!

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号