块级作用域{}
-
ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。
-
ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。
var、let、const的区别
- var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。var生成变量有变量提升的作用。
- let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
var a 变量提升了,提示undefined,而 let b提示报错了 not defined。变量a的运行结果与这段代码运行的意思是一样的:var a ; console.log(`a:${a}`); a=1;这就是变量提升。
ES6模版语言
通过使用符号``,模板中的变量${}。例如:`m:${m},n:${n}`。
ES6默认参数与不定参数
- 默认参数
function sum(flag=true){
if(flag){
return "true";
}
else{
return "error";
}
}
直接调用sum()方法,输出结果为:true。注意点:使用函数默认参数时,不允许有同名参数。
- 不定参数
function f(...values){
console.log(values.length);
}
f(1,2); //2
f(1,2,3,4);
输出结果为:2 4
ES6箭头函数
箭头函数提供了一种更加简洁的函数书写方式。基本语法是:参数 => 函数体
- var f = v => v; //等价于 var f = function(a){ return a; } f(1); //1
- 当箭头函数没有参数或者有多个参数,要用 () 括起来。var f = (a,b) => a+b; f(6,2); //8
- 当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。var f = (a,b) => { let result = a+b; return result; } f(6,2); // 8
- 当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来。var f = (id,name) => ({id: id, name: name});
- 注意点:没有 this、super、arguments 和 new.target 绑定。