学习总结【自用】

学习总结(b站尚硅谷js高级课程)

undefined和null的区别:

1、undefined代表定义了没赋值
2、null定义了且赋值,只是值为null

什么时候给变量赋值为null?
1、初始赋值,表明变量将要赋值给对象
2、结束前,让对象成为垃圾对象被垃圾回收器回收
eg:
//初始赋值为null,表明将要赋值为对象
var b = null
//确定对象就赋值
b=[‘atguigu’,12]
//最后
b = null//让b指向的对象成为垃圾对象(被垃圾回收器回收)
//b=2//没有意义

严格区分变量类型与数据类型?(了解)

数据类型:基本类型,对象类型
变量类型(变量内值的类型,变量本身是没有类型的):基本类型(保存就是基本类型的数据),引用类型(保存的是地址值)
var c = {}//c能找到一个对象

数据-变量-内存:

1、什么是数据?
存储在内存中代表特定信息的‘东东’,本质上是0101…
数据的特点:可传递,可运算
一切皆数据
内存中所有操作的目标:数据
算术运算
逻辑运算
赋值运算
运行函数
2、什么是内存?
内存条通电以后产生的可存储数据的空间(临时的)
内存产生和死亡:内存条(电路板)》通电》产生内存空间==》存储数据==》处理数据==》断电==》内存空间和数据都消失
一块小内存的2个数据
内部存储的数据
地址值
内存分类
堆:对象
栈:全局变量/局部变量
3、什么是变量?
可变化的量,由变量名和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4、内存,数据,变量三者之间的关系?
内存是用来存储数据的空间,变量是内存的标识

关于赋值和内存的问题?

问题:var a = xxx,a内存中到底保存的是什么?
xxx是基本数据,保存的就是这个数据
xxxx是对象,保存的是对象的地址值
xxx是一个变量,保存的是xxx的内存内容(可能是基本数据,也可能是地址值)

 var  a = 3
   var a = function(){

   }
   var b = 'abc'
   a = b
   b = {}
   a = b

关于引用变量赋值的问题?

n个引用变量指向同一个对象,通过其中一个变量修改对象内部数据,其他所有变量看到的是修改之后的数据
两个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象

var obj1 = {name:'tom'}
var obj2 = obj1 (obj2保存的是obj1的内容值,而obj1里面保存的是地址值,不能说obj2保存的是obj1的地址值)
obj1.name = 'jack'
console.log(obj2.name)//'jack'
funciton fn (obj) {
  obj.name = 'bob'
}
fn(obj1)
console.log(obj2.name) //bob

var a = {age: 12}
var b = a
a = {name:'bob',age:13}
conosole.log(b.age, a.name, a.age)//12,'bob',13
funciton fn2 (obj) {
  obj = {age: 15}
}
fn2(a)
console.log(a.age) //13

在js调用函数时传递变量参数时,是值传递还是引用传递

理解一:都是值(基本值/地址值)传递
理解二:可能是值传递,也可能是引用传递(地址值)

var a = 3
function fn(a) {
  a = a+1
}
fn(a)
console.log(a)//3

function fn2 (obj) {
  console.log(obj.name)//
}
var obj = {name: 'tom'}
fn2(obj)
//fn2(obj)里传递的是obj的地址值,把obj2的地址值传递给function fn2(obj)

JS引擎如何内存管理?

1、内存生命周期
  分配小内存空间,得到它的使用权
  存储数据,可以反复进行操作
  释放当前小空间
2、释放内存
  局部变量:函数执行完自动释放
  对象:成为垃圾对象==》垃圾回收器回收
var a = 3//占用三个内存空间,a=3一个,obj一个,{}对象一个
  var obj = {}
  obj = null//对象被释放,剩两个内存空间

  function fn () {
    var b = 4
  }
  fn() //b是自动释放,b所指向的对象在后面的某个时刻由垃圾回收器回收

1、什么是对象?

多个数据的封装体
用来保存多个数据的容器
一个对象代表现实世界中的一个事物

2、为什么要用对象?

统一管理多个数据

3、对象的组成

属性:属性名(字符串)和属性值(任意类型)组成
方法:一种特别的属性(属性值是函数)

4、如何访问对象内部数据?

属性名:编码简单,有时候不能用()
[‘属性名’]:编码麻烦,能通用
问题:什么时候必须使用[‘属性名’]的方式?
1、属性包含特殊字符: - 空格
2、属性名不确定

var p = {}
  //1、给P对象添加一个属性:content-type:text/json
  p.content-type = 'text/json'//不能用
  p['content-type'] = 'text/json'
  console.log(p['content-type'])

  //2、属性名不确定
  var propName = 'myAge'
  var value = 18
  //p.propName = value//不能用
  p[propName] = value
  console.log(p[propName])

函数:

1、什么是函数?
实现特定功能的n条语句的封装体
只有函数是可以执行的,其他类型的数据不能执行
2、为什么要用函数?
提高代码复用
便于阅读交流
3、如何定义函数?
函数声明
表达式
4、如何调用(执行)函数?
test():直接调用
obj.test():通过对象调用
new test():new调用
test.call/apply(obj):临时让test成为obj的方法进行调用
编写程序实现以下功能需求:
1、根据年龄输出对应的信息
2、小于18输出。。
3、大于60,输出。。。
4、其他,输出。。。

function showInfo(age) {
  if(age<18) {
    console.log('太小了')
  }else if(age>60) {
    console.log('太老了')
  }else{
    console.log('刚好')
  }
}
showInfo(12)
showInfo(20)
showInfo(65)
function fn(){//函数声明
  console.log('fn1()')
}
var fn2 = function{//函数表达式
  console.log('fn2()')
}
fn1()
fn2()

var obj = {}
function test2 () {
  this.xxx = 'atguigu'
}
test2.call(obj)//obj.test2() //可以让一个函数成为指定任意对象的方法进行调用
console.log(obj.xxx)

回调函数:

1、什么函数才是回调函数?
1)你定义的
2)你没有调
3)但最终它执行了
2、常见的回调函数
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数

<button id="btn">测试</button>
document.getElementByTd('btn').onclick = function() {//dom事件回调函数
  alert(this.innerHTML)
}
//定时器
  //超时定时器
  //循环定时器
    setTimeOut(function () {//定时器回调函数
    alert{'到点了'}
    }2000)

IIFE:

1、理解
全称:Immediately-Invoked FunctionExpression
2、作用
隐藏实现
不会污染外部(全局)命名空间
用来编写js模块

(function () {//匿名函数自调用
  console.log('...')
})()
(function () {//匿名函数自调用
  var a = 3
  console.log(a+3)
})()
var a = 4
console.log(a)//4

;(function () {
  var a = 1
  console.log(++a)
  function test(){
  console.log(++a)
  }
  window.$ = function(){
  return {
  test:test
  }
  }
})()
//如何调用到test方法:
$.().test//1、$是一个函数;2、$执行后返回的是一个对象

this

1、this到底是什么?
任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
所有函数内部都有一个变量叫this
它的值是调用函数的当前对象
2、如何确定this的值
test():window
p.test():p
new test():新创建的对象
p.call(obj):obj

函数高级:

原型(prototype)
1、函数的prototype属性
每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象)
原型对象中有一个属性constructor,它指向函数对象
2、给原型对象添加属性(一般都是方法)
作用:函数的所有实例对象自动拥有原型中的属性(方法)

console.log(Date.prototype, typeof Date.prototype)//... object
  function fun(){

  }
  console.log(fun.prototype) //默认指向一个Object空对象(空对象是没有我们的属性)
  fun.prototype.test = function() {
  console.log('test()')
  }
  console.log(fun.prototype)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值