ES6语法, 重复的变量名, 块级的作用域, let和const的区别,模板字符串,箭头函数,强制改变this的指向, 对象的简写

 定义变量
- let   => 定义变量的关键字
- const => 定义变量的关键字
2. `var` 和 `let/const`有什么区别?
- 预解析
    - 使用var声明的关键字有预解析,可以有变量的提升
    - let/const声明的关键字不会进行变量的提升
> 示例:
```js
// 使用var声明的关键字有预解析,可以有变量的提升
console.log(a);
var a = 10;

//let/const声明的关键字不会进行变量的提升
console.log(b);
let b = 10;

console.log(c);
const c = 20;
```


- 重复的变量名
    - var可以在同一个作用域声明两个相同的变量
    - let/const声明的变量不能再同一作用域下面声明两次或两次以上
> 示例:
```js
//     - var可以在同一个作用域声明两个相同的变量
//     - let/const声明的变量不能再同一作用域下面声明两次或两次以上
function fn(){
    // var可以在同一个作用域声明两个相同的变量
    var a = 10;
    var a = 20;
    console.log(a);

    //let/const声明的变量不能再同一作用域下面声明两次或两次以上
    // let b = 10;
    // let b = 20;

    // const c = 10;
    // const c = 20;
}
fn();
```


- 块级的作用域
    - 在ES6当中新增一个块级作用域,就是限制函数的使用范围
    - var声明的关键字没有块级作用域
    - let/const声明的变量有块级作用域
    - 块级作用域:任何一个可以执行的代码块`{}`都会限制变量的使用范围
> 示例:
```js
//获取所有的li标签
var lis = document.querySelectorAll("li")
/* 
    let const声明的变量有块级作用域
*/
for (let i = 0; i < lis.length; i++) {
    //给每一个li都绑定一个点击事件
    lis[i].onclick = function(){
        //直接弹出这个i
        alert(i)
    }
}
/* 
    //第一次 i = 0
    {
        //给每一个li都绑定一个点击事件
        lis[0].onclick = function(){
            //直接弹出这个i
            alert(0)
        }
    }
    //第二次 i = 1
    {
        //给每一个li都绑定一个点击事件
        lis[1].onclick = function(){
            //直接弹出这个i
            alert(1)
        }
    }
    //第三次 i = 2
    {
        //给每一个li都绑定一个点击事件
        lis[2].onclick = function(){
            //直接弹出这个i
            alert(2)
        }
    }
*/
```


3. let和const的区别?
- 初始化的时候
    - let声明变量可以不用赋值
    - const声明变量必须要赋值,也就是定义常量必须赋值
> 示例:
```js
 let a = 10;
// let声明变量可以不用赋值
let b;

const c = 20;
// const声明变量必须要赋值,也就是定义常量必须赋值
const d;
```
- 变量的值的改变情况
    - let定义的变量的值可以改变
    - const叫做常量,常量就是不可以改变的量,也就是const声明的变量值不能改变
> 示例:
```js
// - let定义的变量的值可以改变
// - const叫做常量,常量就是不可以改变的量,也就是const声明的变量值不能改变

// let定义的变量的值可以改变
let a = 10;
a = 20;
console.log(a);

// const叫做常量,常量就是不可以改变的量,也就是const声明的变量值不能改变
const c = 60;
c = 50;
console.log(c);
```


4. 模板字符串
- 可以换行
- 可以写变量
> 示例:
```js
var name = "张三"
str = `
    <ul>
        <li>${name}</li>
    </ul>
`
```


5. 箭头函数
> 示例:
```js
//普通函数的写法
function fn(a,b){

}
//箭头函数
fn(a,b) =>{

}
```
- 可以省略小括号不写
    - 当我们的函数只有一个参数的时候,可以不写小括号
    - 如果没有形参或者是两个以上的参数,必须要写小括号
- 可以省略大括号不写
    - 当我们只有一句代码的时候,可以省略大括号不写
    - 当省略大括号不写,会有一个默认的return关键字存在
- 箭头函数没有this
    - 箭头没有自己的this,他的this是沿着在作用域链的形式往外找
- 箭头函数没有arguments
> 箭头函数的语法:
```js
//认识箭头函数
// function fn(a,b){
//     console.log(a,b);
// }
// fn(1,2);

//进化成赋值式函数
// var fn = function(a,b){
//     console.log(a,b);
// }

//进化箭头函数 => 将function关键字省略掉不写,然后使用`=>`替换,放在大括号前面
// var fn = (a, b) => {
//     console.log(a,b);
// }
// fn(1,2);

//只有一个参数的时候,可以不写小括号
// var fn = a =>{
//     console.log(a);
// }
// fn(10);

// 没有形参或者是两个以上的参数,必须要写小括号
// var fn = (a,b,c) =>{
// }

//可以省略大括号不写,只有一句代码的时候,大括号可以不用,会有一个默认的关键字return
// var fn = (a,b) => {
//     return '你好'
// }
// 和上面的代码是一样,完全一样
// var fn = (a,b) => '你好'
// console.log(fn(1,2));


// 箭头函数this的问题
var btn = document.querySelector("button")
// btn.onclick = function(){
//     console.log(this);
// }
//沿着作用域链往外找 => window
// btn.onclick = () =>{
//     console.log(this);
// }

//箭头函数没有arguments,不认得arguments
var fn = (a,b,c,d) =>{
    console.log(arguments);
}
fn(1,2,3,4)
```
6. 强制改变this的指向
- call -> `fn.call("参数一:改变this的指向",'参数二:参数','参数三:参数')`
- apply -> `fn.apply("参数一:改变this的指向",[数组:数组的元素就是参数])`
- bind ->  `fn.bind("参数一:改变this的指向",'参数二:参数','参数三:参数')`
- 区别:
    - call和apply会调用这个函数,bind不会调用这个函数
    - call和bind的参数是直接从第二个参数开始,apply的参数是一个数组


7. 对象的简写
> 示例:
```js
let obj1 = {
    name:"张三",
    eat:function(){
        console.log("文渊吃");
    }
}
// 还可以这样写
const name = "张三"
const age = 18;
let obj2 = {
    //属性的简写
    // name:name,//将name的值赋值给对象obj中属性=>当变量与对象的属性名一样的时候,可以直接写一个
    name,
    //方法的简写 => 可以直接将 :function 省略掉
    eat(){
        console.log("别人吃");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值