我们是否应该使用与let相同的变量来使用滥用,因为我们可以
Should we use abuse using the same variable with let because we can?
因此,让我们有一些非常简洁的作用域规则。作为MDN的一个例子:
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
在if块内重新声明相同的变量名不是很令人困惑吗?或者这只是一个指出let
的作用域规则的坏例子?
有什么好的理由可以仅仅因为我们可以重新声明变量名吗?
这不会令人困惑,因为块会提示每个块范围的变量都属于这个块。对于了解ES6的开发人员来说,这应该不会比函数范围内有一个局部变量更令人困惑。
上面的代码之所以令人困惑,并不是因为x
被重新声明,而是因为代码不是自文档的,x
变量是多余的,它的名称告诉我们发生了什么,两次。
ES5 IIFE
var result;
...
(() => {
var filteredResult = result.filter(...);
...
})();
和ES6块
let result;
...
{
const filteredResult = result.filter(...);
...
}
在同一条船上,为同一个目的服务,他们都不会从可变阴影中获得任何好处。
重用变量名的常见情况是函数参数,并且还需要访问原始变量值:
(result) => {
result = result.filter(...);
}
另一方面,将块范围的变量放在兄弟块中可能比将它们放在嵌套块中更有实际意义:
if (foo) {
const request = 'foo';
...
}
if (bar) {
const request = 'bar';
...
}
两者都可以完全控制其块范围的变量,如果其中一个变量赋值错误丢失,将抛出ReferenceError
。
相关文章:
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 我们可以在JavaScript函数中通过引用传递变量吗
- 为什么我们被教导将document.getElementById(“id”)分配给一个变量,然后将该变量与属性一起使用
- 我们可以在javascript中使用php变量,在php代码中使用javascript变量吗
- 我们可以在javascript url中传递GET变量吗
- 我们如何在Angular JS中使用$Scope变量而不声明
- 我们如何将PHP变量注入Javascript
- 我们可以在浏览器会话中跨网页引用 JavaScript 变量吗?
- 我们如何在外部的节点 js 中使用函数调用中的内部变量
- 我们可以将淡出方法存储在变量中吗?
- 我们可以在 JavaScript/NodeJS 中将键字符串声明为最终变量吗?
- 为什么我们将“(keyup)”分配给模板局部变量的随机值以在 Angular2 中更新
- 如何从 php 变量获取值到我们的 javascript 文件中
- 我们如何从node.js中的回调函数访问变量
- 我们是否需要在 JavaScript 中“取消设置”变量?
- 我们如何在 angular js 中访问 php 变量
- 我们可以更新一个javascript数组变量,而不使用ajax重新加载页面吗?
- 通过使用JavaScript“未定义”(变量),我们可以释放系统内存
- 我们可以将jquery POST/GET回调函数的数据和状态保存在变量中以供进一步使用吗?
- jQuery:Can'我们将jQuery(this)赋值给一个变量