zoukankan      html  css  js  c++  java
  • ECAM6--变量与函数

    LET 关键字

    用来替代了var的关键字

    【特性】
    1. 不允许重复声明
    2. 没有预解析
    3. 块级作用域(遇到{}就会产生作用域)
    【作用域】

    一对 { } 包括的区域称之为代码块
    块级作用域指一个变量或函数只在该区域起作用

    【Dome1】

    console.log(a);//会报错,a is not defined
    let a = 3;//原来如果用var声明到调用后,不会报错,而是undefined,说明用var预解析了,但是用let不会
    

    【Dome2】

    //如果申明i的时候用原来的var,则每次定时器打出来的都是i,之前解决的方案就是利用函数的自执行,将每次的i传入函数中使用,但是如果用let申明i,就解决了问题,打出了0-9的数字。同样,也可以用在选项卡的例子中
    for(let i=0; i<10; i++){
        setTimeout(function(){
            console.log(i)
        },50); 
    }
    

    const 声明常亮

    在定义之后值是固定不变的,即为常量
    常量的值不能修改,但是如果常量保存的是一个对象,那么对象的属性是可以被修改

    可以理解为,对象本身是在堆内存中,它的值本身是可以修改的,但是它的引用地址在栈内存中,一旦用const申明后,引用地址是不能改的
    【Dome】

    const a = 1;
    a = 2;
    console.log(a);
    //会报错:TypeError: Assignment to constant variable.
    
    const a = 1;
    a = 2;
    console.log(a);
    //会报错:TypeError: Assignment to constant variable.
    

    var存在的问题

    1. 可以重复声明
    2. 无法限制修改

    代码的限制,严谨性可以开发大型项目

    1. 没有块级作用域

    let 与 const

    • 共同点:不能重复声明
    • 不同:一个变量/一个常量

    块级作用域

      var btn = document.getElementsByTagName('button')
        console.log(btn);
        window.onload = function(){
                for(var i = 0; i < btn.length; i++) {
                    (function(i){
                        btn[i].onclick = function(){
                            alert(i)
                        }
                    })(i)
                }
        }
    
    let btn = document.getElementsByTagName('button')
        console.log(btn);
        window.onload = function(){
           for(let i = 0; i < btn.length; i++){
                btn[i].onclick = function(){
                    alert(i)
                }
           }
        }
    

    箭头函数

    () => {}

    1. 如果只有一个参数,()可以省略
    2. 如果只有一个return {}可以省略
    function(){
        
    }
    
    ()=>{
        
    }
    

    栗子: 排序

    let arr = [5,61,62,15,4,7]
    // let newArr = arr.sort(function(n1,n2){
    //     return n1 - n2
    // })
    let newArr = arr.sort((n1,n2) => {
        return n1 - n2
    })
    let newArr = arr.sort((n1,n2) => { n1 - n2 })
    
    console.log(newArr);
    

    省略括号

    输入a输出

    let name = a => a * 2
    alert(asd(2))
    

    函数的参数

    1. 参数扩展/展开
    2. 默认参数
    剩余参数

    参数扩展

    1. 收集剩余参数
    • Rest Parameter(args)必须是最后一个
    function show(a,b,...args){
        alert(a);
        alert(b);
        alert(args);
    }
    show(1,23,3,2,54,5)
    // 1,23,[3,2,54,5]
    
    1. 扩展运算符

    只能将数组展开,但是不能赋值

    let aa = [1,2,3]
    let bb = [23,32,43]
    let arr = [...aa,...bb]
    alert(arr)//1,2,3,23,32,43
    

    默认参数

    我希望我没有传的时候默认值

    show = (a,b=12,c=23) => a + b + c
    alert(show(1))
    

    必传参数

    默认参数的一种应用

    const required = () => { throw new Error('msg')}
    
    const add = (a = required(), b = required()) => a + b;
    
    alert(add(1,2))vv
    
  • 相关阅读:
    LCT男人八题系列
    hadoop 伪分布启动-fs格式化
    hadoop 安装
    Scala Actor入门
    Scala 隐式转换和隐式参数
    Scala 类型参数
    Scala 类型参数
    Scala 匹配模式
    scala 函数式编程之集合操作
    Scala 函数式编程
  • 原文地址:https://www.cnblogs.com/LingXiangLi/p/10252651.html
Copyright © 2011-2022 走看看