javascript - ES6 模块中是否有任何上下文/情况无法更新 var 来让?
问题描述
一段时间以来,我习惯于const
声明大多数变量。
如果我不确定新变量将始终保持相同的值,我将使用let
.
我几乎从不使用var
.
这就是我。
但是,任何其他编写 javascript 的人都会有自己喜欢的变量声明约定,如果我接受用户生成的内容,例如用户编写的 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
:
我也知道 ifmyString
和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();
那么,了解这两件事后,在所有用户提交的 ES6 模块var
中将任何声明转换为let
声明(在编译时或运行时)是否是一种合理的保障措施?
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 未定义。
推荐阅读
- c++ - golang os.Setenv 在 cgo C.dlopen 中不起作用?
- microsoft-graph-api - 如何使用 Graph API 读取 sharepoint 在线列表的附件
- html - 拖放后如何保存卡片的位置
- flutter - Flutter ListWheelScrollView.useDelegate 使自动滚动几秒钟
- ios - 如何使用swift从本地JSON文件中解析两个数组
- flutter - Flutter - 在纵向和横向模式之间转换滚动位置
- azure-ad-b2c - 登录成功后的回调事件 msal-react
- javascript - 循环 document.getElementsByClassName
- r - R语言中这个感叹号(!)是什么意思?
- javascript - 有没有办法将变量从一个函数使用到另一个函数?-Javascript