>[danger]ES5有哪些作用域,ES6呢? 在 ES5 中,JavaScript 有两种作用域:全局作用域和函数作用域。 1. 全局作用域:在任何函数之外声明的变量拥有全局作用域,它们可以被整个程序访问。在浏览器环境下,全局作用域通常是指 `window` 对象。 2. 函数作用域:在函数内部声明的变量拥有函数作用域,它们只能在函数内部访问。函数作用域可以帮助我们创建私有变量,防止命名冲突和数据泄露。 在 ES6(ES2015)中,引入了 `let` 和 `const` 关键字,以及块级作用域。 1. 块级作用域:使用 `{}` 大括号包裹的代码块就形成了一个块级作用域。在块级作用域中,通过使用 `let` 和 `const` 声明的变量将仅在当前块级作用域内可见,并且不会被提升(hoist)到外部作用域。这样可以避免变量污染和提供更好的作用域控制。 示例: ```javascript function example() { var x = 1; // 函数作用域 if (true) { let y = 2; // 块级作用域 const z = 3; // 块级作用域 console.log(x); // 可访问 console.log(y); // 可访问 console.log(z); // 可访问 } console.log(x); // 可访问 console.log(y); // 报错,y 不可访问 console.log(z); // 报错,z 不可访问 } example(); ``` 在上述示例中,`x` 是一个函数作用域的变量,在整个 `example` 函数内部都可见。而 `y` 和 `z` 是块级作用域的变量,只能在 if 语句块内部访问。在 if 语句块外部,无法访问 `y` 和 `z` 变量。 总结: - ES5 中有全局作用域和函数作用域。 - ES6 引入了块级作用域,通过 `let` 和 `const` 声明的变量在块级作用域内可见。