您的位置:首页 > Web前端 > JavaScript

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

2017-03-19 15:08 253 查看
这是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();//foo
myInstance.showPrivate(); //bar
console.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的区别的,他们都是构造函数的私有变量且作用域相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript