Javascript 什么决定了可用的ECMAScript版本?

Javascript 什么决定了可用的ECMAScript版本?,javascript,vba,with-statement,Javascript,Vba,With Statement,我被指派去调试一个旧的VisualBasics网站,在这个网站上我们只能访问JavaScript 问题是到处都有使用“With”语句的情况,有些语句甚至包含了“remove()” 这让我想知道,是浏览器决定了ECMAScript的可用版本,还是其他原因?因为如果是浏览器的话,我想我可以用“let”来解决我猜“with”已经解决的大多数范围界定问题 编辑: 代码中如何使用with语句的示例(可在注释中找到其上下文): 它是浏览器使用的JavaScript引擎:Chrome、Chrome和Opera

我被指派去调试一个旧的VisualBasics网站,在这个网站上我们只能访问JavaScript

问题是到处都有使用“With”语句的情况,有些语句甚至包含了“remove()”

这让我想知道,是浏览器决定了ECMAScript的可用版本,还是其他原因?因为如果是浏览器的话,我想我可以用“let”来解决我猜“with”已经解决的大多数范围界定问题

编辑: 代码中如何使用with语句的示例(可在注释中找到其上下文):



它是浏览器使用的JavaScript引擎:Chrome、Chrome和Opera中的V8;Firefox中的SpiderMonkey;IE8中的JScript;IE9+和Edge中的脉轮(IE9+中的脉轮经文非常过时;Edge的是最新的)。

这是浏览器使用的JavaScript引擎:Chrome、Chrome和Opera中的V8;Firefox中的SpiderMonkey;IE8中的JScript;IE9+和Edge中的脉轮(IE9+中脉轮的版本非常过时;Edge的版本非常更新)。

如果您需要internet Explorer支持,let
不会有帮助。我应该注意,VB
With
语句不能解决范围问题。它“支持”const和let,但功能(以我的经验而言)一点也不像ES6@CertainPerformance-IE11具有
const
let
,但语义是错误的(它们的工作方式与ES2015的定义不同)。(为什么不呢?因为IE11在定义完成之前就已经发布了,而且他们在他们支持的东西上抢先一步。)
for(让i=0;i<3;++i){setTimeout(function(){console.log(i);},0);}
将在IE11上记录
3次,而不是记录
0
1
,和
2
@T.J.Crowder哦,有趣的是,我很惊讶MDN上没有这方面的内容。如果您需要internet exploder支持,let
不会有帮助。我应该注意,VB
With
语句并不能解决范围问题。它“支持”const和let,但是,功能(以我的经验)一点也不像ES6@CertainPerformance-IE11具有
const
let
,但语义是错误的(它们的工作方式与ES2015的定义不同)。(为什么不呢?因为IE11在定义完成之前就已经发布了,而且他们在他们支持的东西上抢先一步。)
for(让i=0;i<3;++i){setTimeout(function(){console.log(i);},0);}
将在IE11上记录
3次,而不是记录
0
1
,和
2
@T.J.Crowder哦,有趣的是,我很惊讶在MDS上没有这样的内容。为了准确起见,IEs中的脉轮版本也是JScript引擎。@Teemu-是的,但将前脉轮JScript称为JScript,将脉轮称为脉轮是相当标准的。@T.J.Crowder正是我希望的答案,谢谢。如果With语句不用于解决范围界定问题,那么您使用它做什么?我用一个伪例子编辑了这篇文章,说明它在我正在使用的代码中是如何使用的。@AndersJensen-VB的
with
并不能解决范围问题,它只是可以避免重新键入对象引用。JavaScript的
也不能解决任何范围问题。在你引用的JS代码中,我只想重复
某个变量
,而不是将
一起使用(尤其是因为我总是使用严格模式,而
在严格模式下是不允许的)。@AndersJensen-事实上,是你。准确地说,IEs中的脉轮版本也是JScript引擎。@Teemu-是的,但将前脉轮称为JScript,将脉轮称为脉轮是相当标准的。@T.J.Crowder这正是我所希望的答案,非常感谢。如果With语句不用于解决范围界定问题,那么您使用它做什么?我用一个伪例子编辑了这篇文章,说明它在我正在使用的代码中是如何使用的。@AndersJensen-VB的
with
并不能解决范围问题,它只是可以避免重新键入对象引用。JavaScript的
也不能解决任何范围问题。在您引用的JS代码中,我只是重复
某个变量
,而不是将
一起使用(这不仅仅是因为我总是使用严格模式,而
在严格模式下是不允许的)。@AndersJensen-实际上,您是这样的。
function firstFunction(input1) {

    var someVariable = document.getElementById('someId');

    var i = someVariable.options.length;

    with (someVariable) {
        options[i] = new Option();
        options[i].text = input1.Name;
        options[i].value = input1.Id + ';' + input1.Type;
        i++;
    }
}

function secondFunction(input2) {

    var someVariable = document.getElementById('someId');

    var i = someVariable.options.length;

    with (someVariable) {
        options[i] = new Option();
        options[i].text = input2.PrettyName;
        options[i].value = input2.Name;
        i++;
    }
}