Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个es5代码是做什么的,为什么它说';块范围';?_Javascript - Fatal编程技术网

Javascript 这个es5代码是做什么的,为什么它说';块范围';?

Javascript 这个es5代码是做什么的,为什么它说';块范围';?,javascript,Javascript,这个es5代码做什么来模拟es6常量 特别是这些评论没有意义,因为es5中没有块范围 这是表达这一点的捷径,(基本上) 有些JavaScript运行的环境,例如node,由于没有窗口,因此没有window属性。这允许您创建一个名为global的全局变量,如果该变量存在,它将使用该变量。如果不存在,则默认为尝试window 然后,它在该全局对象上创建一个名为PI 其他详细信息可在此处阅读: 这个es5代码是什么 它创建一个只读的全局变量 特别是这些评论没有意义,因为es5中没有块范围 这里的注

这个es5代码做什么来模拟es6常量

特别是这些评论没有意义,因为es5中没有块范围

这是表达这一点的捷径,(基本上)

有些JavaScript运行的环境,例如node,由于没有窗口,因此没有
window
属性。这允许您创建一个名为
global
的全局变量,如果该变量存在,它将使用该变量。如果不存在,则默认为尝试
window

然后,它在该全局对象上创建一个名为
PI

其他详细信息可在此处阅读:

这个es5代码是什么

它创建一个只读的全局变量

特别是这些评论没有意义,因为es5中没有块范围

这里的注释明确指出了ES6
const
的区别:

  • 您只能在全局环境中创建只读“变量”,因为只有全局环境由对象支持(当然,
    也有
    环境,但谁会使用它)。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",