JavaScript(ECMAScript下)

函数

​ 封装功能的代码段

  • 只定义不调用,没有作用,不会执行
  • js中形参和实参的个数可以不匹配
  • js中函数是可以相互嵌套的
  • js中的作用域只看函数.
  • 函数也是对象

函数的声明

  1. 函数声明:

    • 语法

      function 函数名(参数列表) {
      	...
      }
      
    • 参数:没有var关键字,相当于局部变量的声明,默认值undefined

    • 返回值:

      • 显示定义return 语句,并且return后面有返回值数据
      • 没有定义return 语句,默认值为undefined
  2. 函数表达式:

    • 语法:

      var 变量名 = function 函数名() {
      	...
      };
      
    • 函数表达式的函数名在外部无法使用,但是可以在函数内部使用,实现递归

  3. Function构造函数

    • 语法:

      var add = new Function('x', 'y', 'return (x + y)');
      // 等同于
      function add(x, y) {
          return(x + y);
      }
      

函数的调用

  1. 通过函数声明定义的函数:
    1. 函数名(实参列表);
    2. 先转为函数表达式,在其最后添加()进行调用:
      1. 函数声明前添加~|-|+|-,转为函数表达式
      2. 函数声明前后添加( ),转为函数表达式
  2. 通过函数表达式定义的函数:
    1. 变量名(实参列表);
    2. 函数表达式的后面之间添加()进行调用

函数名的提升

  • js中的变量,变量的声明会提升到当前作用域的最上方

  • js中的函数,函数会提到当前作用域的最上方

    • 函数声明方式定义的函数会提升
    • 函数表达式定义的函数不会提升

实参与形参

  • 实参可以省略,那么对应形参为undefined

  • 若函数形参同名(一般不会这么干),在使用时以最后一个值为准

  • 可以给参数默认值:当参数为特殊值时,可以赋予默认值

    //如果参数a为0,null,undefined\,''时,给默认值'a'|....
    function defaultValue(a) {
        a = a || "a";
        return a;
    }
    console.log('参数默认值-----' + defaultValue());
    //判断参数为某些指定的值的时候,给默认值
    function f(a) {
        //若参数a不为undefined或null,则取本身的值,否则给一个默认值
        (a !== undefined && a !== null) ? a = a: a = 1;
        return a;
    }
    
  • 参数为值传递,传递副本;引用传递时传递地址,操作的是同一个对象

    // 值传递
    var num = 12;
    function change(n) {  //n=12
        n = 30;
    }
    change(12);
    console.log('值传递-----' + num);  //12
    
    // 引用传递
    var obj = {
        name: "tom"
    };
    
    function paramter(o) {
        o.name = '2';
    }
    paramter(obj);
    console.log('引用传递-----' + obj.name);
    
    // 给形参o赋予了新的数组
    var obj2 = [1, 2, 3];  //数组是对象
    function paramter2(o) {
        o = [2, 3, 4];
        o[0] = 3;
    }
    paramter2(obj2);
    console.log('引用传递-----' + obj2); // [1, 2, 3]
    

arguments对象

  • 函数内部使用,调用函数时实参的对象

函数本身的属性和方法

  • 函数名.name 函数名称
  • 函数名.length 形参的个数
  • 函数名.toString() 返回函数的源码

全局变量和局部变量

  • 在一个函数中,如果没有使用var关键字定义的变量,是一个全局变量
  • 函数内部的全局变量,必须要先调用函数,才能全局使用

this

  • js中的this关键字,在运行期为this绑定对象

  • 使用决策树的方式判定this指代的对象

    1. this是否是new使用的,如果是,this指代 new 的那个对象

    2. 通过 对象. 触发调用的,如果是,this指代 . 前面的那个对象

    3. this默认指代window对象,成员变量和成员属性都是window对象的属性或者方法

      function User(name, pwd) {
          this.name = name;
          this.pwd = pwd;
      }
      var u = new User("root", 123456);
      console.log(u); // User {name: "root", pwd: 123456}
      var a = 5;
      console.log(a); // 5
      console.log(this.a); // 5
      console.log(window.a); // 5
      var obj = {
          a: 10,
          fn: function (b, c) {
              console.log(this.a, b, c)
          }
      };
      obj.fn(1, 2); // 10 1 2
      
      var f = obj.fn;
      f(11, 22); // 5 11 22
      
  • 改变this指向

    • call()

    • apply()

      var obj2 = {a: 20};
      obj.fn.call(obj2, "asd", 123); // 20 "asd" 123
      obj.fn.apply(obj2, [{a: 50}, "qwe"]); // 20 {a: 50} "qwe"
      

闭包

  • 实现闭包的要求:

    1. 函数嵌套函数
    2. 外函数返回内函数
    3. 内函数中使用到外函数的环境
  • 内函数中使用的外函数的内容,不会释放内存,可以在外部重读使用这个环境中的局部变量

    function outer() {
        var a = 10;
        function inner() {
            console.log(a--);
        }
        return inner;
    }
    var out = outer();
    out(); // 10
    out(); // 9
    out(); // 8
    out(); // 7
    

JavaScript内置对象

  • String 字符串对象

    • charAt(idx):返回指定位置处的字符
    • indexOf(Chr):返回指定子字符串的位置,从左到右。找不到返回-1
    • substr(m,n):返回给定字符串中从 m 位置开始,取 n 个字符,如果参数 n 省略,则意味着取到字符串末尾。
    • substring(m,n):返回给定字符串中从 m 位置开始,到 n 位置结束,如果参数 n省略,则意味着取到字符串末尾。
    • toLowerCase():将字符串中的字符全部转化成小写。
    • toUpperCase():将字符串中的字符全部转化成大写。
    • replace(s1, s2):替换,将s1替换为s2。
    • length: 属性,不是方法,返回字符串的长度。
  • Math 数学对象

    • Math.random():生成随机数
    • Math.ceil():向上取整
    • Math.floor():向下取整
    • Math.round():四舍五入取整
  • Date 日期

    • 获取日期对象中的指定时间

      • getFullYear()年,getMonth()月,getDate()日,getDay()周,getHours()时,getMinutes()分,getSeconds()秒
    • 设置日期对象中的指定时间

      • setYear(),setMonth(),…
      • toLoacaleString()
        • 注意:月份是从0开始的
    • JS中并没有直接提供可以格式化日期时间的方法,需要我们自己去实现:

      function date_Simply_Formate(time, format='yyyy-MM-dd hh:mm:ss') {
          var newFormat;
          newFormat = format.replace('yyyy', time.getFullYear())
              .replace('MM', time.getMonth() + 1)
              .replace('dd', time.getDate())
              .replace('hh', time.getHours())
              .replace('mm', time.getMinutes())
              .replace('ss', time.getSeconds());
          return newFormat;
      }
      console.log(date_Simply_Formate(new Date(),'yyyy年MM月dd日'));
      

对象

  • js中一切皆对象
  • 创建对象的方式
    1. new Object()
    2. Ojbect.create(null)
    3. {}
  • 操作对象的方式
    1. 对象名.key
    2. 对象名[‘key’] (万能)
  • 对象中的数据是以键值对key:value形式存在
    • 每一个键值对之间使用,分隔
    • key与value之间使用:分隔
    • key满足标识符的命名规范|规则,不满足标识符的命名要求,必须定义在一对引号中
    • 默认对象中的key就是字符串类型
    • value可以是任意类型的数据
  • js中的符合特殊格式json的对象
  • 序列化
    • 序列化对象,将对象转为字符串
    • JSON.stringify(object);
  • 反序列化
    • 反序列化,将一个Json字符串转换为对象
    • JSON.parse(jsonStr);
      • 参数:字符串形式的js对象,key都是字符串形式,前后添加""
  • eval()
    • 实现字符串转对象的效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值