JavaScript Object Function ERROR

一、实例对象和函数对象

  1. 函数对象:将函数作为对象使用时,简称为函数对象

2.实例对象:new 函数产生的对象,简称对象

javascript 复制代码
<script type='text/javascript'>
    //js中所有函数都是Function类的实例
    function Fn () { //Fn函数

    }
    const fn = new Fn() //Fn是构造函数, fn是实例对象(简称为对象)
    console.log(Fn.prototype); //Fn是函数对象
    /**
     * bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,
     * 例如,f.bind(obj),实际上可以理解为obj.f(),这时,f函数体内的this自然指向的是obj
    */
    Fn.bind({}) //Fn是函数对象
    $('#test') // (jQuery函数)  $是一个函数,根据选择器查找DOM元素 -- 括号的左边是函数
    $.get('/test') // (jQuery函数对象) 调用$函数对象的get方法 ---- 点的左边是对象
</script>

二、回调函数

  1. 什么是回调函数
    • 必须是自己定义的
    • 我不会亲自调用
    • 会自己执行
    • 例如setTimeout()中传递的回调函数
  1. 回调函数的两种类型

同步回调

  • 理解:立即执行,完全执行完了才结束,不会放入回调队列中
  • 例子:数组遍历相关的回调函数/ promise的excutor函数

异步回调

  • 理解: 不会立即执行,会放入回调队列中将来执行
  • 例子:定时器回调 / ajax回调 / promise的成功|失败回调
javascript 复制代码
<script type='text/javascript'>
    /**
     * 1.同步回调函数
    */
    const arr = [1, 2, 3, 4, 5]
    arr.forEach(item => { //遍历回调,同步回调函数(就是说只有把forEach里面的回调函数执行完了,foreach才会结束),不会放入队列
      console.log(item);
    })
    console.log('foreach()之后');
    /**
     * 2.异步回调函数
    */
    /**
     * js中两种定时器,setTimeout和setInterval的区别
     *     setTimeout只在指定时间后执行一次
     *     setInterval以指定时间为周期循环执行
    */
    setTimeout(() => { //异步回调函数,会放入队列中将来执行
      console.log('timeout callback()');
    }, 0)
    console.log('setTimeout()之后执行');
</script>

三、JS中的error处理

错误的类型:

  • Error错误:所有错误的父类型
  • ReferenceError: 引用的变量不存在
  • TypeError:数据类型不正确的错误
  • RangeError:数据值不在其所允许的范围内
  • SyntaxError:语法错误
javascript 复制代码
<script type='text/javascript'>
    /**
     * 常见的内置错误
    */
    //1.ReferenceError: 引用的变量不存在
    console.log(a);//Uncaught ReferenceError: a is not defined

    //2.TypeError:数据类型不正确的错误
    let b = null
    console.log(b.xxx);//Uncaught TypeError: Cannot read property 'xxx' of null

    //3.RangeError:数据值不在其所允许的范围内
    function fn () {
      fn()
    }
    fn() //Uncaught RangeError: Maximum call stack size exceeded

    //4.SyntaxError:语法错误
    const c = '''' //Uncaught SyntaxError: Unexpected string
</script>

错误处理:

  • 捕获错误:try ... catch ...
  • 抛出错误:throw error

错误对象:

  • message属性:错误相关信息
  • stack属性:函数调用栈记录信息
javascript 复制代码
<script>
  try{
      let b
      console.log(b.xxx);
    }catch(error){
      console.log(error.message);
      console.log(error.stack);
    }
    console.log('出错之后');
    //2.throw error
    function some () {
      if (Date.now()%2 === 0){
        console.log('当前时间为奇数,可以执行任务');
      } else {
        throw new Error('当前时间为偶数,无法执行')
      }
    }
    //捕获异常
    try {
      some()
    } catch (error) {
      alert(error.message)
    }
</script>
相关推荐
小大宇9 小时前
python sqlalchemy 案例
开发语言·python
光影少年9 小时前
RN原生交互 & 桥接
前端·javascript·react native·react.js·前端框架
用户526835677909 小时前
云原生运维实践:构建 Prometheus + 自定义 Webhook 的硬件声光告警闭环
javascript
GuWenyue9 小时前
踩坑无数!吃透useState 3个核心技巧,彻底解决状态旧值、性能卡顿问题
前端·javascript·react.js
名字还没想好☜9 小时前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐
咩咩啃树皮9 小时前
第46篇:Vue3 Router工程化进阶——懒加载+嵌套路由+全局守卫+权限控制
javascript·vue.js·ecmascript
玛丽莲茼蒿9 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
Ulyanov9 小时前
雷达导引头仿真中的坐标系——从惯性系到量测角
开发语言·python·算法·系统仿真·雷达信号处理·雷达导引头
咩咩啃树皮9 小时前
第44篇:Vue3侦听器完全精讲——watch与watchEffect区别、深度监听、异步业务落地
前端·javascript·vue.js
漂移的电子9 小时前
解决Vue3 + TypeScript + Vite搭建的项目,动态路由页面加载失败的最隐蔽原因
javascript·ubuntu·typescript