# let 和 const 关键字

# let 关键字

  • 作用
    • let 与 var 类似,用于声明一个变量
  • 特点:
    • 在块作用域中有效
    • 不能重复声明
    • 不会预处理,不存在变量提升
  • 应用:
    • 循环遍历加监听
    • 使用 let 取代 var 是趋势
// 报错:age is not defined
// console.log(age);
let age = 12;
// 不能重复声明
// let age = 13;
console.log(age);
let btns = document.getElementsByTagName('button');
//let 关键字使块级作用域成为可能
for(let i = 0; i<btns.length; i++){
    btns[i].onclick = function () {
        alert(i);
    }
}

# const 关键字

  • 作用
    • const 用于定义一个常量
  • 特点
    • 不能修改
    • 其他特点同 let
  • 应用
    • 保存不用改变的数据
const sex = '男';
console.log(sex);
// 不能修改 const 关键字定义的变量
//sex = ' 女 ';   
console.log(sex);

# 变量的解构赋值

# 对象的解构赋值

  • 概念
    • 从对象中提取数据,并赋值给变量 (多个),根据 key 赋值
  • 使用
    • let {n, a} =
  • 用途
    • 给多个形参赋值
let obj = {name : 'yain', age : 21};
let {age} = obj;
console.log(age);
// 不用解构赋值
function person(p) {
    console.log(p.name, p.age);
}
person(obj);
// 使用解构赋值,其实等价于 {name, age} = obj
function person1({name, age}) {
    console.log(name, age);
}
person1(obj);

# 数组的解构赋值

  • 概念
    • 从数组中提取数据,并赋值给变量 (多个),根据下标赋值
  • 使用
    • let [a, b] = [1, '2'];
let arr = ['abc', 23, true];
let [, b, c] = arr;
// 打印 23 true
console.log(b, c);

# 模板字符串

  • 简化字符串的拼接
  • 模板字符串必须用 `` 包含(Tab 键上方的那个键)
  • 变量的变化部分使用 ${xxx} 定义
let obj = { name : 'yain', age : 21 };
// 传统的拼接写法
console.log('我叫:' + obj.name + ', 我的年龄是:' + obj.age);
// 模板字符串写法
console.log(`我叫:${obj.name}, 我的年龄是:${obj.age}`);

# 简化的对象写法

  • 省略同名的属性值
  • 省略方法的 function
let name = 'yain';
let age = 21;
// 普通的写法
let obj = {
    name : name,
    age : age,
    getName : function () {
        return this.name;
    }
};
console.log(obj);
// 简化的写法
let obj1 = {
    name,
    age,
    getName(){
        return this.name;
    }
};
console.log(obj1);
console.log(obj1.getName());

# 箭头函数

  • 作用
    • 定义匿名函数
  • 基本语法
    • 没有参数:() => console.log ('xxxx')
    • 一个参数:i => i+2
    • 大于一个参数:(i,j) => i+j
    • 函数体不用大括号:默认返回结果
    • 函数体如果有多个语句,需要用 {} 包围,若有需要返回的内容,需要手动返回
  • 特点
    • 语法更加简介
    • 箭头函数没有自己的 this,箭头函数的 this 不是调用的时候决定的,而是在定义的时候处在的对象就是它的 this
    • 扩展理解:箭头函数的 this 看外层的是否有函数,如果有,外层函数的 this 就是内部箭头函数的 this,如果没有,则 this 是 window
  • 应用场景
    • 多用来定义回调函数
// 函数的普通定义方式
let fun = function () {
    console.log('fun()');
};
// 打印 fun ()
fun();
// 没有形参,并且函数体只有一条语句
let fun1 = () => console.log('fun1()');
// 打印 fun1 () undefined
console.log(fun1());
// 一个形参,并且函数体只有一条语句
let fun2 = x => x;
// 函数体没有使用大括号,默认返回结果。打印 5
console.log(fun2(5));
// 形参是一个以上
let fun3 = (x, y) => x + y;
// 打印 20
console.log(fun3(5, 15));
// 函数体有多条语句
let fun4 = (x, y) => {
    return x + y;
};
// 打印 10
console.log(fun4(4, 6));
// 打印 定时函数:window
setTimeout(() => {
    console.log("定时函数:", this);
},1000)
let btn = document.getElementById('btn');
// 普通方式定义的函数,this 是在调用时决定的
btn.onclick = function () {
    // 打印 btn
    console.log(this);
};
// 箭头函数,this 是在定义时的环境决定的
let btn2 = document.getElementById('btn2');
btn2.onclick = () => {
    // 打印 window
    console.log(this);
};
let btn3 = document.getElementById('btn3');
let obj = {
    name : 'yain',
    age : 21,
    getName : () => {
        btn3.onclick = () => {
            // 打印 window
            console.log(this);
        };
    }
};
obj.getName();
function Person() {
    this.obj = {
        showThis : () => {
            // 打印 Person {...}
            console.log(this);
        }
    }
}
let fun5 = new Person();
fun5.obj.showThis();
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝