函数是一个具有功能的对象,函数的实参可以是个对象,也可以是个函数,

1.构造函数

  1. var fun = new Function()

2.函数的声明创造

  1. function 函数名([形参1,形参2,形参3...]){
  2. 语句...
  3. }
  4. //调用
  5. 函数名()
  6. 函数里的形参是可选的,写不写都可

3.函数表达式创造函数

  1. var 函数名 = function ([形参1,形参2,形参3...]){
  2. 语句...
  3. }
  4. //调用
  5. 函数名()
  6. 函数名()-->调用函数,相当于使用函数的返回值
  7. 函数名 -->函数对象,相当于直接使用函数对象

4.立即执行函数

  1. (function(){alert('哈哈')})()
  2. 函数执行完,立即执行,只会执行一次

5.利用构造函数的方法,创建对象

  1. 1.工厂方法创建的对象都是object类型,无法区分不同类型的对象,我们可以创建一个构造函数,用来创建对象
  2. 2.构造函数习惯上首字母大写
  3. 3.普通函数直接调用,而构造函数需要使用new关键字来调用
  1. 执行流程:
  2. 1.立即创建一个新的对象
  3. 2.将创建的对象设置为函数中的this,在构造函数中使用this引用新建对象
  4. 3.逐行执行函数中的代码
  5. 4.将新建的对象作为返回值返回
  6. 构造函数优化工厂方法创建对象
  7. function Person(name,age){
  8. this.name = name;
  9. this.age = age;
  10. this.sayname = function(){
  11. console.log('大家好,我是'+this.name+',今年'+this.age+'岁了')
  12. };
  13. }
  14. var per = new Person('孙悟空',500); //通过Person创建的per对象
  15. var per1 = new Person('猪八戒',28,);
  16. per.sayname()
  17. console.log(per)
  18. console.log(per1)
  19. 优化版:把函数里的sayname方法取出来,减少每次调用函数时都要重新创建一个方法的时间,效率优化
  20. function Person(name,age){
  21. this.name = name;
  22. this.age = age;
  23. this.sayname = fun;
  24. }
  25. function fun(){
  26. console.log('大家好,我是'+this.name+',今年'+this.age+'岁了')
  27. }
  28. var per = new Person('孙悟空',500);
  29. var per1 = new Person('猪八戒',28,);
  30. per.sayname()
  31. console.log(per)
  32. console.log(per1)
  33. 项目中可能会遇见同样的函数名,避免这一现象,可以利用原型对象进行优化
  34. function Person(name,age){
  35. this.name = name;
  36. this.age = age;
  37. }
  38. Person.prototype.sayname=function (){
  39. console.log('大家好,我是'+this.name+',今年'+this.age+'岁了')
  40. }
  41. var per = new Person('孙悟空',500);
  42. var per1 = new Person('猪八戒',28,);
  43. per.sayname()
  44. console.log(per)
  45. console.log(per1)
  46. 使用同一构造函数创建的对象,称为一类对象/一个类
  47. 将通过一个构造函数创建的对象,称为该类的实例

6.instomceof

  1. 使用instomceof可以检查一个对象是否是一个类的实例
  2. 语法: 对象 instomceof 构造函数
  3. 所有的对象都是object的后代,所以任何对象和objectinstomceof检查时都会返回true

7.函数嵌套

  1. 函数里面嵌套的函数调用时只能在里面使用,不能在全局使用
  2. function fun() {
  3. var a = 30
  4. console.log(a)
  5. function say() {
  6. var b = 20
  7. console.log(b)
  8. }
  9. say()
  10. }
  11. fun()
  12. 但是用函数表达式的方式去构造函数是可行的,因为函数被声明了,上者没被声明属于全局
  13. var fun = function() {
  14. var a = 30
  15. console.log(a)
  16. say = function() {
  17. var b = 20
  18. console.log(b)
  19. }
  20. }
  21. fun()
  22. say()