gpt4 book ai didi

javascript - ES6 模块中是否存在无法将 var 更新为 let 的上下文/情况?

转载 作者:行者123 更新时间:2023-12-01 00:05:51 24 4
gpt4 key购买 nike

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

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

我几乎从不使用var

这就是我。

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

<小时/>

暂时抛开const...

var 可以被 var 覆盖:

我知道以下内容:

  • var myString = '用 var 声明的我的字符串';
  • var myFunction = function() {console.log('用 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覆盖:

我还知道如果 myStringmyFunction 是用 let 声明的

  • let myString = '用let声明的我的字符串';
  • let myFunction = function() {console.log('用let声明的我的函数')};

它们随后不能被 varletconst 覆盖。

示例:

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 声明(无论是在编译时还是在运行时)是否是一个合理的保护措施? >用户提交的 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 未定义。

关于javascript - ES6 模块中是否存在无法将 var 更新为 let 的上下文/情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60400441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com