学习任何问题 从 是什么 为什么 怎么样 角度来考虑
今天来看看函数
函数大家都太熟悉了,本文针对新手向和带一点的思考的
为什么会有函数这么个东西?
虽然每天都在用这玩意,可是你考虑过没有,为什么会有函数这么个东西
函数里面无非是一段要执行的代码怎么着非要弄这个概念出来?吃饱了撑的?
当然不是,任何东西的出现都有意义,它的意义就是提高复用(个人理解,不一定对)
我们可以把代码里任何使用函数的地方替换成相应的代码。并不会出错,如果好多地方逻辑相同,那么相同的代码岂不是太多了。看着难受不,不难受?你下次试试这样写
所以有了函数这个概念,可以把那啥那那啥一下,就好了
ps:我不喜欢文档里的官方话,我来给你们举个栗子
翻译一下就是:程序里哪哪都是函数,这样大大提高了敲代码的效率,因为只写一遍就可以到处用
pps:可能有大哥说了“这都看不懂别敲代码了”,好家伙,大哥,我说了,举个栗子,我就喜欢用大白话解释一下
基本概念
学一个比较大的概念,“函数”,它就会有一大堆小概念,其中最需要掌握的有:声明,变量的作用域,参数,返回值,以及一些额外的延伸 函数的命名。
函数声明
文绉绉的,就是创建一个函数,为啥要叫声明呢
就长这样
这是语法,我一般学语法,是想掌握它的规律,我一般这样看,哪些是固定的,哪些是自己写的,哪些写了是干啥用的,把这些都捋清楚才行
function 是固定的,就写上就行,,然后是 函数名,然后是括号之间的 参数 列表(在上述示例中为空,我们将在接下来的示例中看到),最后是花括号之间的代码(即“函数体”)。
这样,就可以对一段代码,用它的名字执行,就少写一大堆重复的东西了
除了减少重复代码,还会提高开发效率,比如这里的hello everyone,我现在不想everyone了,只想hello tom,只需要在一处改,其他用到的地方就都改了,如果没函数,你可慢慢去改吧
变量作用域
这个涉及到作用域,我打算另写文章来
参数
这个牛了啊,参数,为啥要有参数呢,你想啊,还是上面那个hello是函数,我们在好多地方都要用这个,但是有的地方是hello 你哥,有的是hello 你姐,这咋办,这个时候,最好的就是还让代码复用,对不一样的地方单独处理
这里处理的办法就是参数,统一写成 hello 参数 而参数就是用这个函数的时候传进来的,就easy了,举个栗子看看吧
我的讲解:用函数的时候,传了俩参数,这时候函数里就拿到这俩,有关这俩的地方都用的是传进来的这俩玩意,每次传的不一样,展示的也不一样
文绉绉的话就是:“函数 showMessage 被声明,并且带有两个参数(parameters),随后它被调用,两个参数(arguments)分别为 from 和 "Hello"”
默认值
这个概念看似简单理解,没啥意义,如下图,就是参数后加=就是默认值,一眼就懂
但是我想说的是,默认值有时候很有用,减少很多不必要的麻烦,这个得到写代码的时候体会
返回值(就是输出)
这个牛了啊,每个函数都有的,但是有时候看不着,为啥?函数执行完就行了呗,为啥有返回值?
因为啊,就连最基础的门,都是有输入输出的,函数要处理东西,它会把这个东西处理成怎么样呢?就需要返回值来处理了
这个好理解,但是有问题需要注意,我饿了,留个坑位下次继续,比如return可能在代码里出现多次,return空怎么办?比如新手可能把有的东西写在return后面?为什么会犯这样的错误,是没有理解return的本质,还是对语法的不熟悉,这些大家也可以多思考思考
扩展 函数的命名
饿了,我直接复制官网了啊,哦对了,我看的是这个文章学习的:zh.javascript.info/function-ba…
以下内容摘自人家的文档(文绉绉的话就是不好读,直接简单地说命名要让人见名知意不就完了)
函数就是行为(action)。所以它们的名字通常是动词。它应该简短且尽可能准确地描述函数的作用。这样读代码的人就能清楚地知道这个函数的功能。
一种普遍的做法是用动词前缀来开始一个函数,这个前缀模糊地描述了这个行为。团队内部必须就前缀的含义达成一致。
例如,以 "show" 开头的函数通常会显示某些内容。
函数以 XX 开始……
"get…"—— 返回一个值,"calc…"—— 计算某些内容,"create…"—— 创建某些内容,"check…"—— 检查某些内容并返回 boolean 值,等。
注:好的函数!就是注释! 人们通常把这样的代码称为 自描述。