JavaScript蓝旭上课总结笔记2

本文介绍了JavaScript中的变量声明(var,let,const)、基本数据类型、数组、函数的使用方式,以及对象的创建和操作。此外,还探讨了异步处理的概念,包括setTimeout、setInterval和Promise,以及回调函数在异步编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

blur得到焦点
onblur失去焦点
declick鼠标双击
keydown键盘按下(过程)
keyup 键盘弹起(结果)
var全局变量
javascript(9种):
number(int/float) string boolean null undefined object(对象) symbol(标识符) Array(数组) function

声明变量

var存在变量提升,多次申明,多次赋值

变量提升:即将变量声明提升到它所在作用域的最开始的部分

console.log(a);
var a=1;

实际执行顺序是:

var a;
console.log(a);
a=1;
for(var a=0;a<5;a++) {
console.log(a)
}
console.log(a)
//仍然能访问a
如果是let,会被报错

let无变量提升,不可以多次声明,可以多次赋值,一般用于循环遍历计数

const一般用于全局作用域做常量

设置文本框

#text {
resize: vertical;
max-height:  ;
min-height:   ;
console.log(5/'0');//infinity无穷大
console.log("qwq"-0)//NaN
console.log(console.log("qwq"));//qwq,undefined看懂括号里面的输出了qwq,看不懂外面的
console.log(console.log("qwq")*5);//qwq,NaN
console.log("qwq")*5//输出一个qwq
console.log(1)+console.log(2)//不能运算,把加号看做终止符号
console.log(1)console.log(2)//报错
console.log(console.log(1))//先1后undefined

splice(start,deleteCount?,item1?) ,通过删除或替换现有元素或者原地
添加新的元素来修改数组,并以数组形式返回被修改的内容(如果只删除了一个
元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组)。
中间负数时 ,表示增加几个
操作对象:
删除对象属性:delete 对象.属性;
对象属性检测:“属性名” in 对象,有返回true

输出多个字符串拼接

 <script>
        var poeple={
            name: "zkm",
            num: 21,
            toString(){
                // return "People:name="+this.name
                // 橙色部分原样输出,输出变量的值用${}
                return `People{name=${this.name}}`
        }
    </script>

对象序列化

  1. 常规转换
obj.tostring()
  • 转换成jason字符串

this

字面量

源代码中一个固定值的表示法,字面量表示如何表达这个值(一眼看上去就知道是什么类型)

  • 数字字面量:8、9/10
  • 字符串字面量:‘黑马’
  • 布尔字面量:true

函数的使用

两种方法

<script>
      //申明+调用
      // 函数:1.
      function 函数名() {

      }
      // 调用
      // 2.函数关键字
      var 变量名=function(){}
</script>

匿名函数

没有名字的函数
两种情况:

  • 匿名函数自执行:声明后不需要调用就直接执行(自调用函数),程序一进入就执行该函数
  • 函数表达式:把函数存到变量,或将函数存到数组对应位置,调用时通过变量或者数组对应位置进行调用
    调用时要写括号

对象使用

三种方法

<script>
// 利用字面量创建对象,对象的属性和方法
      var obj={
          name:'xxc',
          age: 18,
          sayHi: function() {
              console.log('hi');
          }
      }
      // 利用new object创建,创建后再赋值
      var obj=newObject();
      obj.name='xxc';
      obj.age=18
      obj.sayHi=function() {
          console.log('hi');
      }
      // 一些对象具有相同的属性和方法,抽象封装到函数里
      function 函数名(形参) {

      }
      var 对象=new 函数名(实参)
      var 对象=new 函数名(实参)
    </script>

删除对象属性:delete 对象.属性;
对象属性检测:“属性名” in 对象,有返回true

异步

同步任务结束,才有任务队列执行
异步任务不是马上放到任务队列中,会放到特定的线程中,特定时间放进去
在这里插入图片描述

主程序接着走,延迟和等待程序挂到另外一个列表等待执行,不阻塞。

定时器:settimeout(执行一次)/setInterval(隔一段时间执行一次)
异步请求:ajax
es6:promise

不会因延迟和等待阻塞程序
同步代码优先级比异步代码高

setTimeout(function(){},t)

在JS中,凡是有异步的地方,基本就会有回调函数的存在

// 函数
      function fn() {
        setTimeout(function () {
          return 124;
        }, 0);
      }
      var res = fn();
      console.log(res); //结果为undefined
// 通过回调函数
      // 函数有个形参
      function fn(calllback) {
        setTimeout(function () {
         var data=123;
         // 结果不能直接return
          //return data;
         //  把结果作为实参,叫callback这次参数
         callback(data)
        }, 0);
      }
      var fn1=function(res) {
         console.log(res);
      }
      fn(fn1);
      //fn1函数传到fn,被callback接受,callback(data),data实参,data的值被res接受
    </script>
function fn(calllback) {
        setTimeout(function () {
          var data = 123;
          // 结果不能直接return
          //return data;
          //  把结果作为实参,叫callback这次参数
          callback(data);
          //防止参数传递错误
          if (typeof callback == "function") callback(data);
          //简洁
          typeof callback == "function" && callback(data);
        }, 0);
      }
      fn(function (res) {
        console.log(res);
      });
    </script>

异步

解决回调地狱的问题

<script>
      // 三个异步代码,三个function
      var p1 = new Promise(function (resolve, reject) {
        setTimeout(function () {
          resolve(1);
        }, 1000);
      });
      var p2 = new Promise(function (resolve, reject) {
        setTimeout(function () {
          resolve(2);
        }, 500);
      });
      var p3 = new Promise(function (resolve, reject) {
        setTimeout(function () {
          resolve(3);
        }, 200);
      });
      p1.then(function(res){
         console.log(res);
         return p2;
      })
      .then(function(res){
         console.log(res);
         return p3;
      })
      .then(function(){
         console.log(res);
      })
    </script>

1:08
24573816
在10秒时放入宏任务2
在20秒时放入宏任务1
下面两段时执行完33for循环才开始
在33+20秒时放入宏任务3
在43毫秒时放入宏任务4
中间执行完33秒时,时间已经远超10秒和20秒
所以两个任务会马上执行,1、3同时输出
到了43
在这里插入图片描述
在这里插入图片描述
浏览器最小时间间隔是4ms,如果间隔时间还小,浏览器无法识别,会按照注册事件依次执行

var timer1=setTimeout(function() {
         console.log(timer1);
      }, 3);
      var timer2=setTimeout(function() {
         console.log(timer2);
      }, 2);
      var timer3=setTimeout(function() {
         console.log(timer3);
      }, 1);
      // 上面结果是321
      // 如果是0.3,0.2,0.1,无法识别,结果是123
1.回调函数
函数以参数的形式传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值