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>
相关推荐
烟话62 小时前
vue3响应式基础
前端·javascript·vue.js
im_AMBER2 小时前
万字长文:手撕JS深浅拷贝完全指南
前端·javascript·面试
Shadow(⊙o⊙)2 小时前
C语言学习中需要的额外函数
c语言·开发语言·学习
还是大剑师兰特2 小时前
pinia-plugin-persistedstate详解与Vue3使用示例
开发语言·javascript·ecmascript
方便面不加香菜2 小时前
C++ 类和对象(二)
开发语言·c++
@大迁世界2 小时前
20.“可复用组件”具体指的是什么?如何设计与产出这类组件?.
开发语言·前端·javascript·ecmascript
有味道的男人2 小时前
电商效率翻倍:用 Open Claw 对接 1688 接口,快速实现图片选品 + 货源监控
java·开发语言·数据库
froginwe112 小时前
Chart.js 雷达图:深入解析与实际应用
开发语言