ES6笔记

ES6

  • let & cont
  • 箭头函数
  • Objective.defineProperty(对象,属性,描述符)

let & cont

  • var: 变量声明提升,可重复定义,全局变量挂载在window上
  • 作用域(变量生命周期):全局作用域,局部(函数)作用域
  • let:
    • 没有变量声明提升,不可重复定义,全局变量不会挂载在window上
    • 声明的变量和{}搭配产生块级作用域,内部的变量无法在外部使用;产生Temporal dead zone临时死区;解决闭包问题

for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

console.log(a);//结果undefined
var a = 5;//变量声明var a;提升。var a=5; --> (var a;)+(a=5)
for(let i = 0; i < 3; i++){
     
	let i = 'test';
	console.log(i);//结果test, test, test
}
  • const
    实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
const PI = 3.1415;
PI = 3;// TypeError: Assignment to constant variable.
const obj = {
     };
obj.name = 'haha';

箭头函数

arguments 和 this 分别由定义时外围最接近一层的非箭头函数的

Objective.defineProperty(对象,属性,描述符)

数据描述符

  • value:属性值。默认’’。
  • writable: true. 默认false。
  • configurable: true. 默认false。
  • enumerable: true. 默认false。
  • 当对象内设置有初始值时。默认值全部为true,只有空对象这些数据描述符默认值才为false.

存取描述符

  • set: function(){}, 属性访问器。进行写操作时调用该方法。
  • get: function(){}, 属性访问器。进行读操作时调用该方法。
  • 与数据描述符value和writable不可同时设置, 否则会报错
var obj = {
     };
var temValue = '';
Object.defineProperty(obj, 'name', {
     
    // value: 'test',
    // writable: true,
    configurable: true,
    enumerable: true, 
    get: function(){
     
        return temValue;
    },
    set: function(newValue){
     
        temValue = newValue;
    }
})
//var obj = {
     
//    temValue: 'test',
//    get name(){
     
//        return this.temValue;
//    },
//    set name(newValue){
     
//        this.temValue = newValue;
//    }
//};
obj.name = 'aaa';
console.log(obj.name);

作用
双向数据绑定的核心方法,主要作数据劫持操作(监控属性变化),同时是ES6后期很多语法糖底层实现的核心方法。

你可能感兴趣的:(ES6笔记)