Javascript笔记(一)
重新学习,做点笔记。
1、ES5
规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。如下代码是非法的:
1 | if(true){ |
2、ES6
引入了块级作用域,明确允许在块级作用域之中声明函数。ES6
规定,块级作用域之中,函数声明语句的行为类似于 let
,在块级作用域之外不可引用。
3、考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
1 | // 块级作用域内部的函数声明语句,建议不要使用 |
4、暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。(声明变量之前,都是变量的死区,不能调用)
5、ES5 只有两种声明变量的方法:var
命令和 function
命令。ES6
除了添加 let
和 const
命令,后面章节还会提到(《阮一峰ECMAScript 6 入门》),另外两种声明变量的方法: import
命令和 class
命令。所以,ES6
一共有 6 种声明变量的方法。
6、数组与对象结构赋值的区别:数组按顺序,对象按 key
值
7、对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。代码如下:
1 | let { foo: foo, bar: bar } = { foo: 'aaa', bar: 'bbb' }; |
8、解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于 undefined
和 null
无法转为对象,所以对它们进行解构赋值,都会报错。
1 | let { prop: x } = undefined; // TypeError |
9、ECMAScript
中所有参数都是按值传递,不可能通过参数传递参数。
1 | // 例1 向参数传递基本类型(传递的值被复制给局部变量) |
10、ECMAScript
函数的一个重要特点:命名的参数只提供便利,但不是必须。参数可通过 arguments
对象访问(一个与数组类似的对象)
11、return
语句默认返回值是 undefined
(在此之前一只没有注意过。。。。。。)
12、switch
语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如:“10”和10是不等的)
感谢你的阅读,可能未完待续,不定期更新