ES6 强制开启严格模式 作用域 •var 声明局部变量,for/if花括号中定义的变量在花括号外也可访问 •let 声明的变量为块作用域,变量不可重复定义 •const 声明常量,块作用域,声明时必须赋值,不可修改 // const声明的k指向一个对象,k本身不可变,但对象可变 function test() { const k={ a:1 } k.b=3; console.log(k); } test()解构赋值 { let a, b, 3, rest; [a, b, c=3]=[1, 2]; console.log(a, b); } //output: 1 2 3 在ES6中,作用域和解构赋值是两个重要的语法特性,它们极大地提升了JavaScript代码的可读性和效率。下面将详细阐述这两个概念及其应用场景。 ES6引入了更严谨的作用域规则,以减少一些潜在的错误。在ES5中,`var`声明的变量在函数或全局范围内都是可访问的,这可能导致变量意外被重写或污染。而在ES6中: 1. `var`声明的变量仍然是局部变量,但它有一个特殊之处,即在函数内部,`var`变量可以在其声明之前被引用,这就是所谓的变量提升(Hoisting)。然而,`var`变量在块级作用域之外也是可见的,如`for`或`if`语句中的变量。 2. `let`的引入解决了`var`的一些问题,它创建的是块级作用域的变量。这意味着,`let`声明的变量只在包含它的代码块内有效,无法在块外部访问,而且同一作用域内不允许重复声明`let`变量,防止了变量污染和意外覆盖。 3. `const`用于声明常量,同样遵循块级作用域。一旦声明,`const`变量的值就不能更改,但需要注意的是,如果`const`声明的是一个对象,虽然对象的引用不能改变,但对象的属性是可以修改的。 例如: ```javascript function test() { const k = { a: 1 }; k.b = 3; console.log(k); } test(); // 输出:{ a: 1, b: 3 } ``` 接下来,我们讨论解构赋值。解构赋值允许我们将数组或对象的结构直接赋值给变量,使得数据提取变得简洁。它有两种主要形式:数组解构和对象解构。 1. 数组解构:可以方便地从数组中提取值,并赋给对应位置的变量。 ```javascript [a, b, c = 3] = [1, 2]; console.log(a, b); // 输出:1 2 ``` 2. 对象解构:可以从对象中提取属性值,赋给对应的变量。 ```javascript let o = { p: 42, q: true }; let { p, q, c = 5 } = o; console.log(p, q); // 输出:42 true ``` 解构赋值的应用场景包括但不限于: - 变量交换:通过数组解构实现两个变量的值互换,无需额外的临时变量。 ```javascript let a = 1, b = 2; [a, b] = [b, a]; console.log(a, b); // 输出:2 1 ``` - 获取多个函数返回值:当函数返回一个数组时,可以利用解构赋值一次性获取所有值。 ```javascript function f() { return [1, 2, 3, 4, 5]; } let [a, , b] = f(); console.log(a, b); // 输出:1 3 ``` - 获取JSON值:在处理JSON数据时,可以通过对象解构快速提取所需属性。 ```javascript let metaData = { title: 'abc', test: [{ title: 'test', desc: 'description' }] }; let { title: esTitle, test: [{ title: cnTitle }] } = metaData; console.log(esTitle, cnTitle); // 输出:abc test ``` ES6中的作用域规则和解构赋值是现代JavaScript编程的重要组成部分,它们提高了代码的可读性,降低了出错的可能性,同时也提供了更高效的编程方式。理解并熟练运用这些特性,能让你的JavaScript代码更加优雅和强大。
- 粉丝: 10
- 资源: 937
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯真IP库,用于ip查询地址使用的数据库文件
- 基于java的二手车交易网站的设计和实现论文.doc
- 基于8086的电子琴程序Proteus仿真
- NSMethodNotImplementedException如何解决.md
- ClassNotFoundException(解决方案).md
- ComputedOptionError解决办法.md
- NSInvalidFormatException如何解决.md
- InstantiationException(解决方案).md
- PropsValidationError解决办法.md
- KeyboardInterrupt.md
- MethodOptionError解决办法.md
- CloneNotSupportedException(解决方案).md
- WatcherError解决办法.md
- NSFileManagerError如何解决.md
- UnsupportedOperationException(解决方案).md
- MemoryError.md