AI智能
改变未来

JavaScript函数的几种定义方式(个人感觉挺全乎)


javascript定义的函数的几种方式

归纳一下函数定义的几种方式

一、函数的组成:函数名+函数体

(1).使用function关键字定义函数–具有优先级,优先将function关键字定义的函数优先执行

  function  functionName(arg0, arg1 ,..., argN){      statements  }  函数的调用:functionName()

(2).使用函数表达式的形式定义函数(即将匿名函数复制给变量)

  var  variable = function(arg0, arg1 ,..., argN){    statements   }  console.log(typeof  variable);     //function  函数调用:variable();

(3).使用new Function构造函数定义函数

1.构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯首字母大写

2.构造函数和普通函数的区别在于,调用方式不一样。作用也不一样(构造函数用来新建实例对象)

3.调用方式不一样。

a.普通函数的调用方式:直接调用person()

b.构造函数的调用方式:需要使用new关键字来调用new Person()

4.构造函数的函数名与类名相同:Person()这个构造函数,Person即是函数名,也是这个对象的类名

5.内部使用this来构造属性和方法

function Person(age,){this.age = age;this.name = name;this.sex = sex;this.sayHi = function(){alert(\"aaa\")}}let person = new Person(18,\"zs\",\"男\")console.log(person.name) // zs

6.构造函数的执行流程

A、立刻在堆内存中创建一个新的对象

B、将新建的对象设置为函数中的this

C、逐个执行函数中的代码

D、将新建的对象作为返回值

7.普通函数例子:因为没有返回值,所以为undefined

//普通函数function person(){}let per = new person()console.log(per) //undefined

7、构造函数例子:构造函数会马上创建一个新对象,并将该新对象作为返回值返回

function Person(){}let per = new Person()console.log(per) //\"[Object Object]\"

8、用instanceof 可以检查一个对象是否是一个类的实例,是则返回true

所有对象都是Object对象的后代,所以任何对象和Object做instanceof都会返回true

function Person(age){this.age = age}let per = new Person()console.log(per instanceof Person)

(4).箭头函数()=>{}

语法:

(参数列表)=>{//函数体}
1.参数只有一个括号可以省略,参数多个必须写括号
2.只包含一个表达式花括号可以省略还有return,包含多个不可以省略
3.箭头函数的this指向为父作用域的this,不是调用时的this,call,apply,bind都改变不了
4.普通函数的this指向永远是谁调用了就指向谁
5.箭头函数不能作为构造函数,不能使用new关键字
6.箭头函数没有原型属性

(5).自执行函数

语法:

(function(形参){})(实参)
自己调用自己

(6).匿名函数

语法:

function(){console.log(\"111\")}
匿名函数无法自己运行,会报错因为语法问题,解决方法如下
(function(){console.log(\"111\")})()	// 直接为自执行函数
应用场景:

1.给元素添加事件的时候2.对象的方式3.函数表达式4.回调函数5.作为return的返回值

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JavaScript函数的几种定义方式(个人感觉挺全乎)