函数数据类型:
1.普通函数
- 类(内置类&自定义类)
对象数据类型:
{}普通对象 [] 数组对象 /^$/正则对象 日期对象 Math函数对象 arguments类数组对象
HTMLCollection/NodeList元素或者节点集合类数组对象...
实例是对象数据类型
- 类的prototype是对象数据类型(Function.prototype除外,它是一个匿名空函数)
-
函数的三种角色
普通函数
形参、实参、ARGUMENTS、RETURN、箭头函数
私有作用域(栈内存、执行上下文)
形参赋值 & 变量提升
作用域链
栈内存的释放和不释放(闭包)
2.构造函数(类)
+ 类和实例
+ prototype 和 __proto__ 原型和原型链
+ instanceof
+ constructor
+ hasOwnProperty
+ ...
- 普通对象
+ 它是由键值对组成的
+ ..
function Fn(n, m) {
this.x = n + m;
this.y = n - m;
let total = n * m;
return total;
}
Fn.prototype.say = function () {
console.log('SAY');
}
//=>普通函数
let total = Fn(20, 10);
//=>构造函数(类和实例)
let f = new Fn(20, 10);
//=>普通对象
Fn.total = 1000;
function Foo() {
getName = function () {
console.log(1);
};
return this;
}
Foo.getName = function () {
console.log(2);
};
Foo.prototype.getName = function () {
console.log(3);
};
var getName = function () {
console.log(4);
};
function getName() {
console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName(); //=>Foo.getName:输出2这个方法(AF2) =>new AF2()
new Foo().getName();
new new Foo().getName();