Javascript 这个es5代码是做什么的,为什么它说';块范围';?
这个es5代码做什么来模拟es6常量 特别是这些评论没有意义,因为es5中没有块范围 这是表达这一点的捷径,(基本上) 有些JavaScript运行的环境,例如node,由于没有窗口,因此没有Javascript 这个es5代码是做什么的,为什么它说';块范围';?,javascript,Javascript,这个es5代码做什么来模拟es6常量 特别是这些评论没有意义,因为es5中没有块范围 这是表达这一点的捷径,(基本上) 有些JavaScript运行的环境,例如node,由于没有窗口,因此没有window属性。这允许您创建一个名为global的全局变量,如果该变量存在,它将使用该变量。如果不存在,则默认为尝试window 然后,它在该全局对象上创建一个名为PI 其他详细信息可在此处阅读: 这个es5代码是什么 它创建一个只读的全局变量 特别是这些评论没有意义,因为es5中没有块范围 这里的注
window
属性。这允许您创建一个名为global
的全局变量,如果该变量存在,它将使用该变量。如果不存在,则默认为尝试window
然后,它在该全局对象上创建一个名为PI
其他详细信息可在此处阅读:
这个es5代码是什么
它创建一个只读的全局变量
特别是这些评论没有意义,因为es5中没有块范围
这里的注释明确指出了ES6const
的区别:
- 您只能在全局环境中创建只读“变量”,因为只有全局环境由对象支持(当然,
环境,但谁会使用它)。OTOH,也有
适用于任何环境const
- 像这样创建的变量不是阻塞范围,这与
不同const
换言之,此代码尽可能接近
const
功能。Yes;这就是为什么他们说不在块作用域中。ES5中没有块作用域,所以您不需要对它进行注释,这就像注释if
语句如何工作一样。注释是说这是尝试在ES5中创建const
的限制。它必须在全局上下文中,并且不会被限定为块作用域。关于代码的任何内容都不是ES6特有的。@Jonbonbon,是的,但它不是一个变量,而是一个属性。和常量变量一样不可访问,这意味着您必须通过对象{}.someconst
访问它。然而,如果你把它放在全局对象上,你可以只做someconst
,这更符合模拟const
,但是这个
将指向全局对象(无论是窗口还是foo)(在严格模式下),所以你不需要任何代码,这段代码只是一点点的绒毛,不能增加总体概念的价值。
// only in ES5 through the help of object properties
// and only in global context and not in a block scope
Object.defineProperty(typeof global === "object" ? global : window, "PI", {
value: 3.141593,
enumerable: true,
writable: false,
configurable: false
})
PI > 3.0;
typeof global === "object" ? global : window
var tmp;
if (typeof global === "object") {
tmp = global;
} else {
tmp = window;
}
Object.defineProperty(tmp, "PI",