ES6 中 var 的用例是什么?

2023-11-24

If the let关键字引入了块作用域的正确实现,var还有用例吗?我是从软件设计的角度来看这个问题的,而不是从语法的“你可以”的角度来看的。


If the let关键字引入了块作用域的正确实现,var还有用例吗?

可能有一种用例:let全局范围内的声明不会在全局对象上创建属性。例子:

"use strict"; // for chrome
var foo = 42;
let bar = 21;
console.log('window.foo (var)', window.foo); // 42
console.log('window.bar (let)', window.bar); // undefined

From 8.1.1.4 全球环境记录

物体环境记录全局环境记录的组件包含所有内置全局变量的绑定(第18条) 以及由 a 引入的所有绑定函数声明, 生成器声明, or 变量语句包含在全局代码中。全局代码中所有其他 ECMAScript 声明的绑定都包含在全局环境记录的声明性环境记录组件中。

然而,这也可以通过创建一个轻松解决explicit全局变量通过直接分配给全局对象来使用:

window.foo = 42;

顺便说一句,这也是创建全局类的唯一方法,因为class声明具有相同的行为。

(注:我并不是提倡使用全局变量)


有些语法结构只能使用var,但这更多的是规范演变的结果,并没有真正达到任何实际目的。例如:

if (true)
  var foo = 42; // valid but kind of useless or bad design

// vs

if (true)
  let foo = 42; // invalid

不过,块作用域并不是唯一有用的功能。这颞死区是另一个方便的功能,可以更轻松地发现错误。比较:

var foo = 42;
function bar() {
  console.log(foo); // undefined
  var foo = 21;
}
bar();

// vs

var foo = 42; // or `let`, doesn't matter
function bar() {
  console.log(foo); // ReferenceError, temporal dead zone
  let foo = 21;
}
bar();

尝试访问时出现引用错误let尚未初始化的变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 中 var 的用例是什么? 的相关文章

  • 轮询时承诺异步等待

    我正在尝试将使用承诺 和轮询 的函数转换为异步函数 但我不太确定它是如何工作的 我有这个 function myFunction return new Promise resolve gt stuff here var poll setIn
  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • Object.entries() 确实为 Maps 返回一个空数组

    我刚刚发现 那个呼唤Object entries在 Map 上确实返回一个空数组 我希望它返回任何返回的内容Map entries Example let map new Map 1 2 map entries 1 2 Object ent
  • Cleancode:在 Promise 中尝试/捕获

    我正在研究 redux form atm 并找到了这段代码 它对我有用 但是有没有更干净的方法可以用 ES6 风格编写它 const asyncValidate values dispatch gt return new Promise r
  • ES6 Reflect API 的好处

    我一直在努力升级一些代码以使用 ES6 语法 我有以下代码行 delete this foo 我的 linter 提出了使用建议 Reflect deleteProperty this foo 您可以找到该方法的文档here https d
  • ES2015 中 `export { foo as default }` 有效吗?

    我收到了GitHub 上的问题 https github com benmosher eslint plugin import issues 54关于我的 ES2015 模块导入 导出验证插件 ESLint 无法识别default使用以下语
  • Javascript ES6 承诺支持“done”api 吗?

    例如 p new Promise function resolve reject throw err p done 在大多数 Promise Polyfill 库中 done 会抛出错误 并且当前执行将退出 但如果我们使用p then 什么
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 同步获取已解决 Promise 的值

    如果我们知道一个Promise肯定已经解决了 我们如何访问该值 如果不能 为什么不呢 let a Promise resolve 123 console log a value 以下不起作用 它打印 First Last 123 conso
  • ReactCSSTransitionGroup 组件WillLeave 未调用

    我尝试使用 ReactCssTransition 但不知何故该事件没有被调用 componentWillLeave 这是我的组件 import React Component from react import TransitionGrou
  • 如果对象包含在另一个数组中,则从数组中删除该对象

    我试图从数组中删除一个对象 如果该对象的属性 唯一 包含在另一个数组中 我知道我可以像这样执行嵌套 for 循环 for i 0 i lt array length i for j 0 j lt array2 length j if arr
  • ES6 Promises/在满足多个 Promise 后调用函数(不能使用 Promises.all)[重复]

    这个问题在这里已经有答案了 我正在编写 Javascript 它需要这些事件按以下顺序发生 同时触发多个 API 调用 所有调用完成且响应返回后 执行一行代码 听起来很简单 但棘手的部分是我不能使用 Promises all 因为我仍然希望
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 代理递归函数

    想象一个简单的递归函数 我们试图包装它以检测输入和输出 A simple recursive function const count n gt n 1 count n 1 Wrap a function in a proxy to ins
  • 如何在 while 循环中使用 fetch

    我的代码是这样的 var trueOrFalse true while trueOrFalse fetch some address then if someCondition trueOrFalse false 但我无法发出获取请求 看起
  • React Native:访问静态函数内的组件状态

    我有一个这样定义的组件 export class A extends Component constructor props this state scene 0 static changeScene scene this setState
  • JavaScript 符号并不能阻止对象中的名称冲突

    我已经开始研究 JavaScript 中的符号 并开始在我的对象中使用它们来帮助解决名称冲突 但是在使用它们时我仍然可以覆盖属性吗 我很难理解 JavaScript 中符号的意义 它们被谈论了很多 人们说它们很聪明 因为它们不会导致对象中的
  • ES6 Bare Import:如何使用以及何时使用?

    ES6 允许我们使用新的导入语法 使用它 我们可以将模块导入到我们的代码中 或者这些模块的一部分 使用示例包括 Import the default export from a module import React from react
  • ES6 类文字中的 IIFE

    在 ES5 中我们都可以这样做 myClass prototype myMethod function return function 我可以对 ES6 类文字执行同样的操作吗 不 至少现在还没有 ES6 类仅支持声明方法 因此任何不直接为
  • 如何在react.js中将/n替换为换行符?

    我正在尝试更换每一个 n to a br tag in ReactJS In my note note对象有一个包含多个的字符串 n in it 示例注释 注释 test ntest ntest 我尝试过的ReactJS note note

随机推荐