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。是的,这完美地说明了罗伯特·哈维在问题下方的评论中提到的范围问题。