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的返回值