Javascript ES6模块中是否有任何上下文/情况不会';无法更新var以允许?

Javascript ES6模块中是否有任何上下文/情况不会';无法更新var以允许?,javascript,ecmascript-6,es6-modules,variable-declaration,Javascript,Ecmascript 6,Es6 Modules,Variable Declaration,一段时间以来,我一直使用const来声明大多数变量 如果我不能绝对确定一个新变量是否始终保持相同的值,我将使用let声明新变量 我几乎从不使用var 那是我 然而,任何其他编写javascript的个人都会有他们自己的首选变量声明约定,如果我接受用户生成的内容,例如用户编写的ES6模块,那么就无法自信地预测这些约定可能是什么 暂时撇开常数 var可以被var覆盖: 我知道: var myString='My String用var'声明 var myFunction=function(){co

一段时间以来,我一直使用
const
来声明大多数变量

如果我不能绝对确定一个新变量是否始终保持相同的值,我将使用
let
声明新变量

我几乎从不使用
var

那是我

然而,任何其他编写javascript的个人都会有他们自己的首选变量声明约定,如果我接受用户生成的内容,例如用户编写的ES6模块,那么就无法自信地预测这些约定可能是什么


暂时撇开常数

var
可以被
var
覆盖: 我知道:

  • var myString='My String用var'声明
  • var myFunction=function(){console.log('My function用var声明')
可以用
var
声明的同名变量覆盖

示例:

var myString='My String用var'声明;
var myFunction=function(){console.log('My function用var声明');
var myString='My Overwriting String用var'声明;
var myFunction=function(){console.log('My Overwriting function with var');
log(myString);

myFunction()如果用户编写了这样的函数,将var更改为let将失败:

函数运行(){
对于(变量i=0;i<3;i++){
控制台日志(i);
}
console.log('最终i',i);
}
console.log(“开始运行”);
run();
函数runLet(){
for(设i=0;i<3;i++){
控制台日志(i);
}
console.log('最终i',i);
}
log('starting runLet');

runLet()如果用户编写了这样的函数,将var更改为let将失败:

函数运行(){
对于(变量i=0;i<3;i++){
控制台日志(i);
}
console.log('最终i',i);
}
console.log(“开始运行”);
run();
函数runLet(){
for(设i=0;i<3;i++){
控制台日志(i);
}
console.log('最终i',i);
}
log('starting runLet');

runLet()它们的范围不同。我认为这足以排除一个简单的音译,除非你告诉你的用户这会发生。对。说得好。我想我们中的任何人都很难仅仅因为有人在编写ES6模块就这么说,这并不意味着他们在编写时没有把块作用域当作JS中不存在的东西。这是否可以通过向用户发出警告消息来解决?“请使用
const/let
var
将不被接受。”可以接受的假设是
var
在ES6中基本上是不受欢迎的(不是字面意义上的,但任何最新的开发人员都知道这一点),但您给出的示例已经无法安全地将所有
var
转换为
let
——任何使用
var
多次声明变量的代码都会出错。除此之外,还有罗伯特指出的范围问题。不过,我认为这是唯一的区别。它们的范围不同。我认为这足以排除一个简单的音译,除非你告诉你的用户这会发生。对。说得好。我想我们中的任何人都很难仅仅因为有人在编写ES6模块就这么说,这并不意味着他们在编写时没有把块作用域当作JS中不存在的东西。这是否可以通过向用户发出警告消息来解决?“请使用
const/let
var
将不被接受。”可以接受的假设是
var
在ES6中基本上是不受欢迎的(不是字面意义上的,但任何最新的开发人员都知道这一点),但您给出的示例已经无法安全地将所有
var
转换为
let
——任何使用
var
多次声明变量的代码都会出错。除此之外,还有罗伯特指出的范围问题。不过,我认为这是唯一的区别。谢谢你,@TKoL。是的,这完美地说明了罗伯特·哈维在问题下方的评论中提到的范围问题。谢谢,@TKoL。是的,这完美地说明了罗伯特·哈维在问题下方的评论中提到的范围问题。