ES6 模块中是否存在无法将 var 更新为 let 的上下文/情况?
Are there any contexts / situations in ES6 Modules where it wouldn't work to update var to let?
一段时间以来,我使用 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();
所以,知道了这两件事,在所有 User 中将任何 var
声明转换为 let
声明(无论是在编译时还是在运行时)是否是一种合理的保护措施提交的 ES6 模块?
在 ES6 模块中是否存在无法将 var
更新为 let
的任何可想象的上下文/情况?
如果用户编写了这样的函数,将 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 函数错误,因为 i 未定义。
一段时间以来,我使用 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();
所以,知道了这两件事,在所有 User 中将任何 var
声明转换为 let
声明(无论是在编译时还是在运行时)是否是一种合理的保护措施提交的 ES6 模块?
在 ES6 模块中是否存在无法将 var
更新为 let
的任何可想象的上下文/情况?
如果用户编写了这样的函数,将 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 函数错误,因为 i 未定义。