一段时间以来,我一直使用const来声明大多数变量。
如果我不能确定一个新变量总是持有相同的值,我将使用let声明新变量。
我几乎从不使用var。
那就是我。
但是,任何其他编写javascript的人都会有自己喜欢的变量声明约定,而且,如果我接受user-generated-content (如用户编写的ES6模块),就无法自信地预测这些约定可能是什么。
暂时撇开const ..。
var可以被var覆盖
我知道以下几点:
var myString = 'My String declared with var';var myFunction = function() {console.log('My Function declared with var')};可以用用var声明的同名变量覆盖。
示例:
var myString = 'My String declared with var';
var myFunction = function() {console.log('My Function declared with var')};
var myString = 'My Overwriting String declared with var';
var myFunction = function() {console.log('My Overwriting Function declared with var')};
console.log(myString);
myFunction();
let不能被var覆盖
我还知道如果myString和myFunction是用let声明的
let myString = 'My String declared with let';let myFunction = function() {console.log('My Function declared with let')};它们随后不能用var、let或const覆盖。
示例:
let myString = 'My String declared with let';
let myFunction = function() {console.log('My Function declared with let')};
var myString = 'My Overwriting String declared with var';
var myFunction = function() {console.log('My Overwriting Function declared with var')};
console.log(myString);
myFunction();
因此,了解这两方面,在所有用户提交的var模块中将任何let声明转换为let声明(无论是在编译时还是在运行时)是否是一种合理的保障措施?
在ES6模块中是否有任何可想象的上下文/情况无法将var更新为let
发布于 2020-02-25 18:01:16
如果用户编写了这样的函数,那么将var更改为let将失败:
function run() {
for (var i = 0; i < 3; i++) {
console.log(i);
}
console.log('final i', i);
}
console.log('starting run');
run();
function runLet() {
for (let i = 0; i < 3; i++) {
console.log(i);
}
console.log('final i', i);
}
console.log('starting runLet');
runLet();
runLet函数错误,因为我是未定义的。
https://stackoverflow.com/questions/60400441
复制相似问题