1. 函数进阶

Created
Sep 12, 2023 03:02 PM
Tags
JS基础
 
首先: JS中所有事物都是对象,对象是拥有属性和方法的数据。所以函数也是对象
当创建一个函数的时候,发生了什么?
实际上,函数是Function类型的实例,此时可以把每一个创建出来的函数,当成是Function类型的实例对象,所以函数本身拥有的对象属性,
来源于FunctionFn.Constructor 即为 Function
但是与此同时要注意: Function.prototype._proto=== Object.prototype
可以理解为: 构造器函数的构造函数是object
也可以简单的理解:函数即对象
 
声明函数的几种方式
  1. 普通函数声明
  1. 声明函数 函数表达式
  1. 构造函数
  1. 匿名函数

1. 函数表达式

函数声明和函数表达式的区别:
  1. 函数声明会将函数提升到最前面(即使你写代码的时候,代码在最后才写这个函数),成为全局函数;
  1. 函数声明要指定函数名,而表达式不用,可以作为匿名函数使用
//函数表达式 let fun2 = function () { console.log("2"); } fun2();
 

2. 构造函数

在 JavaScript 中,用 new 关键字来调用的函数,称为构渣函数。构造函数首字母一般大写
举个例子,我们要录入一年级一班中每一位同学的个人信息,那么我们可以创建一些对象
var p1={ name:"a", age: 1,gender:"男",hobby:"basketball"}; var p2={ name:"b", age:1,gender:"女",hobby:"football"}; var p3={ name:"c", age: 1,gender:"女",hobby:"table tennis"}; var p4={ name:"d", age: 1,gender:"男",hobby:"onfoot"};
但是这样太麻烦了 要写4个 所以我们就可以构建一个实例对象
function Person(name, gender, hobby) { this.name = name; this .gender = gender; this.hobby = hobby; this.age = 6; } var p1 = new Person('zs' ,'男','basketbal1');
(1) 当以 new 关键字调用时,会创建一个新的内存空间,标记为 Animal 的实例 (2) 函数体内部的 this 指向该内存,每当创建一个实例的时候,就会创建一个新的内存空间 (3) 给 this 添加属性,就相当于给实例添加属性 (4) 由于函数体内部的this指向新创建的内存空间,默认返回 this ,就相当于默认返回了该内存
notion image

3. 自执行匿名函数

声明式会导致函数提升,function会被解释器优先编译。即我们用声明式写函数,可以在任何区域声明,不会影响我们调用
自执行函数也叫立执行函数
是将函数的声明和调用合并在一起
大体分为两种自执行匿名函数
作用立即执行函数会形成一个单独的作用域,我们可以封装一些临时变量或者局部变量,避免污染全局变量;
第一种写法
;(function () { //代码块 })()
第二种写法
;(function () { // 代码块 }())