首页 > Web开发 > 详细

JS高级

时间:2021-05-02 16:31:44      阅读:22      评论:0      收藏:0      [点我收藏+]
* 基本(值)类型
  * Number ----- 任意数值 -------- typeof   
  * String ----- 任意字符串 ------ typeof
  * Boolean ---- true/false ----- typeof
  * undefined --- undefined ----- typeof/===
  * null -------- null ---------- ===
* 对象(引用)类型
  * Object ----- typeof/instanceof   存储数据
  * Array ------ instanceof         属性为数字下标,内部数据是有序的
  * Function ---- typeof  存储代码,并执行
instanceof:判断对象的具体类型,不是字符串类型
 typeof判断出来的是数值类型的字符串表达,判断出来显示的是小写的字符串,不能判断null和object,object和array,都返回object不能区别开
1. undefined与null的区别?
  * undefined代表定义未赋值
  * nulll定义并赋值了, 只是值为null
2. 什么时候给变量赋值为null呢?
  * 初始赋值, 表明将要赋值为对象
  * 结束前, 让对象成为垃圾对象(被垃圾回收器回收)
3. 严格区别变量类型与数据类型?(未懂)
  * 数据的类型
    * 基本类型
    * 对象类型
  * 变量的类型(变量内存值的类型)
    *  基本类型: 保存就是基本类型的数据
    * 引用类型: 保存的是地址值
数据 变量 内存
1. 什么是数据?
  * 存储在内存中代表特定信息的‘东东‘, 本质上是0101...
  * 数据的特点: 可传递, 可运算
  * 一切皆数据
  * 内存中所有操作的目标: 数据
    * 算术运算
    * 逻辑运算
    * 赋值
    * 运行函数
2. 什么是内存?
  * 内存条通电后产生的可储存数据的空间(临时的)
  * 内存产生和死亡: 内存条(电路版)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失
  * 一块小内存的2个数据
     * 内部存储的数据
     * 地址值
  * 内存分类
    * 栈: 全局变量/局部变量
    * 堆: 对象
3. 什么是变量?
  * 可变化的量, 由变量名和变量值组成
  * 每个变量都对应的一块小内存, 变量名用来查找对应的内存, 变量值就是内存中保存的数据
4. 内存,数据, 变量三者之间的关系
  * 内存用来存储数据的空间
  * 变量是内存的标识
 
关于引用变量赋值问题
  * 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
  var obj1 = {name: ‘Tom‘}
  var obj2 = obj1
  obj2.age = 12       //修改对象内部数据
  console.log(obj1.age)  // 12
  * 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象
  var a = {age: 12}
  var b = a
  a = {name: ‘BOB‘, age: 13}  //指向另一个对象
  b.age = 14
  console.log(b.age, a.name, a.age) // 14 Bob 13
  function fn2 (obj) {
    obj = {age: 15}           //给obj换了个地址值,没有修改a,当函数用完则成为垃圾对象(形参只在函数作用域内起效果)
  }()
  fn2(a)

  console.log(a.age)   //13
问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递
  * 理解1: 都是值(基本/地址值)传递
  * 理解2: 可能是值传递, 也可能是引用传递(地址值)
问题: JS引擎如何管理内存?
1. 内存生命周期
  * 分配小内存空间, 得到它的使用权
  * 存储数据, 可以反复进行操作
  * 释放小内存空间
2. 释放内存
  * 局部变量: 函数执行完自动释放
  * 对象: 成为垃圾对象==>垃圾回收器回收
 
对象
1. 什么是对象?
  * 多个数据的封装体
  * 用来保存多个数据的容器
  * 一个对象代表现实中的一个事物
2. 为什么要用对象?
  * 统一管理多个数据
3. 对象的组成
  * 属性: 属性名(字符串)和属性值(任意)组成
  * 方法: 一种特别的属性(属性值是函数)
4. 如何访问对象内部数据?
  * .属性名: 编码简单, 有时不能用(包含特殊字符 - 空格 变量名不确定
  * [‘属性名‘]: 编码麻烦, 能通用
 
函数
4. 如何调用(执行)函数?
  * test(): 直接调用
  * obj.test(): 通过对象调用
  * new test(): new调用
  * test.call/apply(obj): 临时让test成为obj的方法进行调用
  var obj = {}
  function test2 () {
    this.xxx = ‘atguigu‘
  }
  // obj.test2()  不能直接, 根本就没有
  test2.call(obj) // obj.test2()   // 可以让一个函数成为指定任意对象的方法进行调用
  console.log(obj.xxx)

 

回调函数

 

1. 什么函数才是回调函数?
  1). 你定义的
  2). 你没有调
  3). 但最终它执行了(在某个时刻或某个条件下)
2. 常见的回调函数?
  * dom事件回调函数 ==>发生事件的dom元素
  * 定时器回调函数 ===>window

  * ajax请求回调函数(后面讲)
  * 生命周期回调函数(后面讲)

 匿名函数自调用

2. 作用
  * 隐藏实现
  * 不会污染外部(全局)命名空间
  * 用它来编码js模块

 

JS高级

原文:https://www.cnblogs.com/zyq982796687/p/14725478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!