欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6规范,注意要点,满满的干货

程序员文章站 2023-12-22 09:02:22
...

标题今天带给大家ES6的规范要点,满满的干货

1、闭包
概念:1.函数的内部调用了外部的变量,叫做闭包
  2.闭包是为了将内存保留下来,就是将参数保留,不会立即被销毁
  3.闭包过程中会使用到立即函数,立即保存函数是为了保留参数,否则就会立即销毁
  4.添加点击事件,点击事件是为了得到一个函数,返回函数(回调函数)

注意:在闭包过程中,会发生内存泄漏,内存被参数占据了,所以内存变少了

示例:1.(未闭包)
 var allBtn = document.querySelectorAll("button")
//无论点击哪个都会输出11,因为最后i++后,i变成了11,变为了全局变量。
      for (var i = 1; i <= 10; i++) {
           	allBtn[(i - 1)].onclick = function() {
                  			 console.log(i)
                              		 }
        } 

示例:2.(闭包)

for (var i = 1; i <= 10; i++) {
                allBtn[(i - 1)].onclick = (function(index) {
                    //返回的是一个回调函数
                    return function() {
                        console.log(index)
                    }
                })(i)
            } 
//运行过程:将i传进来,给到function(index)的index,最后点击得到的是一个回调函数,在回调函数里面输出index。

示例:3.(使用let)

 for (let i = 1; i <= 10; i++) {
            allBtn[(i - 1)].onclick = function() {
                console.log(i)
            }
        }

2.对象、数组的解构

 var user = {name: "蔡徐坤",type: "NBA形象大使",like: "篮球"}
//将对象里面的属性解构出来
 var { name,type,like} = user
        console.log(name)
        console.log(type)
        console.log(like)
//本来会报错,不过加了括号就不会报错
        var abc = "456";
 	({abc} = { abc: "789"})

  let [teacher1, teacher2, teacher3 = "老明"] = ["老王", "老陈", undefined]
        console.log(teacher1)
        console.log(teacher2)
        console.log(teacher3)
//注意,undefine与null不同,undefined会使用默认值,null会使用null


3.在html中不但可以插进文字变量,还可以插进函数

 		var price = 10;
        	var num = 20;
         var abc = () => {
            return "今天天气很好"
        }
  document.body.innerHTML = `总价:${price*num}美元`
        	document.body.innerHTML = `今天的感想是:${abc()}`

注意:定义常量一般用大写表示
        const HOST = "www.baidu.com"
        const IP = "192.168.5.17"

4.循环for()、foreach()、for(..in..)、for(..of..),Map()之间的差别
 	1.for循环
        for (var i = 0; i < stars.length; i++) {
            console.log(stars[i])
        }

 2.foreach()循环
        stars.forEach(function(item, i) {
            console.log(i)
            console.log(item)
        })

  3.for in 循环
            for (let i in stars) {
                //输出的是索引值
                console.log(i)
                    //输出的是value
                console.log(stars[i])
            }

   4.for of循环
        for (let i of stars) {
            //直接输出的是value值
            console.log(i)
        }

5. Map循环,通过对数组的j解构,可以快速获取Wap对象的key和value值
        let a = new Map()
            //设置a的属性
        a.set("username", "admin")
        a.set("password", "123456")
            //console.log(a)
        for (let [key, value] of a) {
            console.log(key)
            console.log(value)
        }

5.箭头函数(及其应用)
注意:实际上,function(a,b)= 写成了(a,b)=>

 //如果只有返回值
        var add = function(a, b) {
                return a + b
            }
 //箭头函数写法
        var add = (a, b) => a + b



     //如果不是只有返回值
        var fn = function() {
            var body = document.body
            var div = document.createElement("div")

            function hei() {
                return "今天你开心了吗"
            }
            div.innerHTML = `${hei()}`
            body.appendChild(div)
        }
        fn()

 //箭头函数写法
        var fn = () => {
            var body = document.body
            var div = document.createElement("div")

            function hei() {
                return "今天你开心了吗"
            }
            div.innerHTML = `${hei()}`
            body.appendChild(div)
        }
        fn()

 使用箭头函数可以将this指向改为上一级对象

具体实例:需求:每秒改变一次d1Dom的颜色,颜色随机生成

 var d1Dom = document.querySelector("#d1")

方法1:直接在定时器里写对象名称
 d1Dom.onclick = function(e) {
                setInterval(function() {
                    d1Dom.style.backgroundColor = `rgb(${parseInt(Math.random()*255)},${parseInt(Math.random()*255)},${parseInt(Math.random()*255)})`
                }, 1000)
            } 
方法2:将d1Dom所指向的this转化为that,供给下面使用

d1Dom.onclick = function() {
              console.log(this)
                  //这里的this指的是d1Dom
              that = this
              setInterval(function() {
                  //这里的this指的是window
                  console.log(this)
                  that.style.backgroundColor = `rgb(${parseInt(Math.random()*255)},${parseInt(Math.random()*255)},${parseInt(Math.random()*255)})`
              }, 1000)
          } 
方法3:使用箭头函数可以将this指向改为上一级对象

 d1Dom.onclick = function() {

            setInterval(() => {
                console.log(this)
                this.style.backgroundColor = `rgb(${parseInt(Math.random()*255)},${parseInt(Math.random()*255)},${parseInt(Math.random()*255)})`
            }, 1000)
        }


6.扩展运算符

1.数组的复制(...stars),用于函数的调用
 //复制数组,是在另一个内存地址生成,与原来的内存地址不一样,...stars就是复制数组里面的内容
var stars = ["范冰冰", "李晨", "蔡徐坤", "tfboys", "胡歌"]
var arr = [...stars]
console.log(arr == stars)//false

  getstars(stars[0], stars[1], stars[2], stars[3], stars[4])
       		等价于
  getstars(...stars)

2.rest参数使用

 function fn(a, b, ...args) {
            console.log(a)
            console.log(b)
            console.log(args)
        }
        fn(1, 2, 3, 4, 5, 6, 7, 8, 9)
            //输出a=1,b=2,args为一个数组[3,4,5,6,7,8,9]

7.默认参数(可能会考面试题)

//如果不判断的话,会报错,因为两个都是undefined
var fn = function(a, b) {
            //a,b是否存在 
            a = a ? a : 0;
            b = b ? b : 0
            return a + b
        }
var result = fn()
       console.log(result)

 	//给a,b一个默认值
        function add(a = 0, b = 0) {
            return a + b
        }
        var result2 = add()
        console.log(result2)


  var x = 3

        function cba(x = 4, y = x) {
            console.log(x) //4,因为x=3没有传进来,默认从最近的位置开始寻找
            console.log(y) //4
        }

        function abc(a = 4, y = x) {
            console.log(y) //3,因为最近没有值,最近的x值为3
        }



上一篇:

下一篇: