JavaScript高级-函数(上) | 青训营笔记

67 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

什么是函数?

  • 实现特定功能的n条语句的封装体
  • 只有函数是可以执行的,其他的数据类型不能执行

为什么用函数?

  • 提高代码复用

  • 便于阅读

如何定义函数?

  • 函数声明
  • 表达式

如何调用函数?

  • 直接调用 _test()
  • 通过对象调用 obj.test()
  • new调用 new test()
  • 临时让test成为obj的方法进行调用
  1. test.call/apply(obj) 等同于 obj.test()
  2. test函数中的this指向obj

1.回调函数

1.1什么是回调函数?

  • 定义了

  • 没有调用

  • 某个时刻或某个条件下最终执行了

1.2常见回调函数?

  • dom事件回调函数

    • this是发生事件的dom元素
  • 定时器回调函数

    • this是window
  • ajax请求回调函数

  • 生命周期回调函数

2.立即执行函数IIFE

2.1作用

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

image.png

3.函数中的this

3.1this是什么?

  • 任何函数本质上是一个对象调用的,若没有直接指定对象则为window

  • 所有函数内部都有一个变量this

  • 他的值是调用函数的对象

3.2如何确定this的值

  • test()

    • window
  • obj.test()

    • obj
  • new test()

    • new出来的对象
  • p.call(obj)

    • obj

4.函数高级之原型

4.1函数中的prototype属性

  • 每个函数都有一个prototype属性,默认指向一个空Object实例对象(即原型对象)
  • 原型对象中有一个constructor属性,指向函数对象

4.2给函数对象添加属性(一般是方法)

  • 作用:函数的所有实例对象自动拥有原型中的属性和方法

4.3显示原型和隐式原型

  • 显示原型属性
  • 每个函数function都有一个prototype,即显示原型,默认指向一个空的Object对象,即显式原型
  • function Fn() {} // 内部语句:this.prototype = {}
  • 隐式原型属性
  • 每个实例对象都有一个__proto__,即隐式原型
  • let fn = new Fn() // 内部语句:this.proto = Fn.prototype 实例对象的隐式原型为对应构造函数的显示原型的值

4.4总结

  • 函数的prototype属性
  • 在定义函数时自动添加的,默认值是一个空Object对象
  • 对象的__proto__属性
  • 创建对象时自动添加的,默认值是构造函数的prototype属性
  • 程序员可以直接操作显式原型,但不能操作隐式原型(ES6之前)
  • 实例对象的隐式原型的指向等于构造函数的显示原型

image.png

image.png