重学前端之函数01

举报
dfsafdfsaf 发表于 2021/05/20 11:05:17 2021/05/20
【摘要】 定义函数的4种方式函数声明或者函数表达式函数声明定义:强制以function开头,其后紧接着强制性的函数名以及括号和括号内一系列的可选参数,每个函数声明必须作为一个单独的javascript语句,函数声明必须独立(也能被包含在其他函数或者代码块中) 函数字面量由四个部分组成 + function关键字 + 函数名字 + 括号,括号里面装一个或者多个参数没有参数就是() + 函数体,包...

定义函数的4种方式

  • 函数声明或者函数表达式
函数声明

定义:强制以function开头,其后紧接着强制性的函数名以及括号和括号内一系列的可选参数,每个函数声明必须作为一个单独的javascript语句,函数声明必须独立(也能被包含在其他函数或者代码块中)

 函数字面量由四个部分组成
  + function关键字
  + 函数名字
  + 括号,括号里面装一个或者多个参数没有参数就是()
  + 函数体,包含在大括号内的一系列js语句,函数体可以为空但是必须存在
函数表达式

定义:总是其他表达式的一部分函数(作为辅助表达式的右值,或者作为其他函数的参数)

//如
var fun = function(){};

function fun(callback){
   return callback()
}

setTimeout(function() {
    //....
}, 100);

函数声明与函数表达式的区别

1、解析器在执行环境中加载数据时,会优先读取函数声明,并使其在执行任何代码之前可用;而函数表达式,必须等到解析器执行到它所在的代码行,才会被解释执行如下:

fun()//杨紫1111
fun1()//fun1 is not a function
function fun(){
    console.log('杨紫1111')
}
var fun1 = function (){
    console.log('杨紫66')
};
//这涉及到变量提升后期专门一章讲解
  • 构造函数
//num1,num2 是参数  最后一个参数都会被看成是一个函数体
new Function(num1,num2,"return num1+num2");

不推荐:会导致解析两次代码(第一次解析常规ECMAScript代码,第二次解析传入构造函数中的字符串)
  • 箭头函数
箭头函数( (param1, param2, …, paramN) => expression)
  • 生成器函数
function* 函数名(参数){函数体}

1、生成器函数在执行时能暂停,后面又能从暂停出继续执行。

2、使用yield关键字可以暂停函数

3、调用一个生成器函数,会得到生成器的迭代器对象。

  • 使用next()方法。被首次(后续)调用时,其内的语句会执行到第一个(后续)出现yield的位置为止,yield 后紧跟迭代器要返回的值。
  • yield*(多了个星号),则表示将执行权移交给另一个生成器函数(当前生成器暂停执行)。
  • next()-> {value:value1,done:true|false}
    • value:表示本次返回的值,即yield表达式返回的值
    • done:表示生成器后续是否还有yield语句,即生成器函数是否已经执行完毕并返回。

注意:next()方法时,如果传入了参数,那么这个参数会作为上一条直线的yield语句的返回值

函数是第一型对象
  • 可以通过自面量进行创建
  • 可以赋值给变量、数组、或其他对象的属性
  • 可以作为参数传递给函数
  • 可以作为函数的返回值返回
  • 可以拥有动态创建并赋值的属性
函数是一等公民

什么是一等公民? 可以作为函数的参数,可以作为函数的返回值,可以赋值给变量

函数没有重载

当声明两个相同名字的函数时,后面一个会覆盖前面一个函数,实际上就是覆盖了引用第一个函数的变量

function funName(){console.log('杨旎奥')};
function funName(){console.log('杨紫')};
funName()
其他
  • 所有函数都有一个name属性,该属性保存的是该函数名称的字符串如
  • 每个函数都是Function类型的实例
  • 所有函数调用时都会有一个隐式参数 argument和this
  • ...
function myFun(){}
//name:'myFun'
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。