箭头函数
ES6允许“箭头”来定义函数。
var f = v => v
上面语句等同于:
var f = function (v){
return v;
}
特殊情况:
var f = () => v; //没有参数
var f = (num1, num2) => v; //两个参数
var f = (num1, num2) => { return num1*num2; } //代码块多条�语句时
因为打括号被解释为代码块,�所以如果箭头函数返回一个对象�,必须在对象外面加上一个打括号,否则会出错。
需要注意this对象的指向:
类
模版字符串
之前的语法如果想在页面中输出字符串模版,利用“”进行大量的拼接,十分不方便。在ES6中提供了模版字符串,用`(反引号)标识,用${}将变量括起来,如下:
$('#result').append(
`He is <b>${name}</b> and he widh to know his ${age}, that is all.`
)
const
const修饰�常量,并不是保证��变量的值不变,而是保证指向变量的内存地址不变。对于简单的数据类型,内存地址等同于变量本身,所以可以说是保证变量值不变,但是对于复合类型数据,变量指向的是内存地址,const只能保证这个指针不变,至于它指向的数据结构是否变化就不能控制了。因此,一个对象声明为常量必须十分小心。
const foo = {} //声明一个常量
foo.name = 'andy'; //�给常量添加一个属性,可以成功
foo = {} //�将常量重新指向一个内存地址会报错,不可成功
let用法
ES6新增了let方法来声明变量,它鱼var的作用大致相同,只是let声明的变量只在let所在的代码块区域有效。
{
let a = 1;
var b = 2;
}
a //�a is not defined
b //2
另外for循环还有一个特别之处,就是�设置循环变量的那一部分是一个父作用域,而循环体内部是一个子作用域。
for ( let i = 0; i < 3; i++){
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
上面代码正确运行了三次,输出了三次abc,证明函数内部变量i和循环变量i不在同一个作用域,�他们有各自单独的作用域。
do表达式
本质上,块儿级作用域是一个语句,将多句操作封装在一起。
{
let t = f();
t = t * t;
}
上述代码中,�块儿级作用域奖两条语句封装在一起,�但是在块儿级作用域之外,没办法得到t的值,这是因为块儿级作用域不返回值,除非t是全局变量。
现在有一个提案,将块儿级作用域变成一个表达式,就可以得到返回值:
let x = do{
let t = f();
t * t;
}
网友评论