JavaScript函数—学习前端基础必备的知识,掌握了函数的定义、函数的参数 、函数的以及返回,离成功又近一步

43 篇文章 0 订阅
33 篇文章 0 订阅

学习函数最大的目的就是给我们省劲儿,它可以对代码复用。
函数定义一次,可以无限制的调用。
逻辑修改的时候,只要改函数定义里就可以了。
通过参数,我们可以得出不同的结果。

  • JavaScript函数是什么?

JavaScript 函数是被设计为执行特定任务的代码块,它里面是一系列的逻辑运算。

JavaScript 函数会在某代码调用它时被执行。

JavaScript函数使用的流程大概是以下几步:

定义、调用、返回。

这个很像我们平时炒菜。

函数定义类似我们的菜谱;
函数调用类似炒菜过程;
函数返回类似菜炒好以后,盛盘上桌。

这里面还会有一个知识点:函数参数。

函数参数类似厨房里的各种调料。

下面,我就来具体讲解一下。

  • JavaScript函数定义

JavaScript函数的定义,常见的有两种:函数声明和函数表达式

函数声明通过 function 关键词定义函数,其后是函数名、括号 ()、代码块{}。

函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。
括号里可包括零个或多个参数,多个参数由逗号分隔,参数可以是任意的数据类型。

格式如下:

function 函数名(参数1,参数2,参数3,……){ 要执行的代码 }

表达式也可以定义函数,函数表达式可以在变量中存储。比如:

var a = function(x,y){return x * y};

大家注意一下,函数声明的时候,大括号结束之后不用写分号,但是,通过表达式定义的函数,一般会在最后加一个分号,它算是一个完整的句子。

细心的同学可能会发现,上面的函数没有名称。没有名称的函数叫做匿名函数。通过表达式定义的函数,通常使用匿名函数,把函数表达式赋值给一个变量。变量的值就是一个函数了。调用的时候,通过变量名调用。

函数如果挂载到一个对象上,作为对象的一个属性,就称它为对象的方法。对象是有属性和方法的。属性一般是静态的,方法其实就是函数。

函数在代码里只用定义一次,但是,可以被调用无数次。定义一个函数,该函数并不会被执行,只有调用的它的时候,它才会执行。

就像我们写了一个菜谱,菜谱并不会炒出菜来,只有我们真正炒菜的时候,菜谱的每一步才会被我们真正的执行起来。

  • JavaScript函数参数

参数分为形参和实参。

形参(形式参数)是在函数定义中所列的名称。

实参(实际参数)是当调用函数时由函数接收的真实的值。

形参是变量名,实参是变量值。

参数就类似菜谱里的调料,菜谱上写的酱油、醋、盐、油等等就是形参,我们炒菜的时候,各个调料实际放的量,就是实参。

JS函数也可以看成是对象,因为JS函数也有属性和方法。

介绍一个和参数有关的函数内置对象:arguments。它是一个数组,里面是所有的实参,和所有普通的数组一样,它有一个非常常用的属性:length(arguments的长度,也就是实参的个数)。

比如,我们定义了一个test函数,里面返回了实参个数,就可以这样写:

function test(a,b){
    return arguments.length;  //函数返回值
}

实参和形参的个数可以不相等。

当实参的个数小于形参的个数,函数里接收到的是undefined

当实参的个数大于形参的个数,可以通过arguments接收。这种情况一般不会出现。

参数通过值传递和通过对象传递,对于原始值的影响是不一样的。

这里说的对象也包括数组,数组是一种特殊的对象。

通过值传递,函数改变了参数的值,它不会改变参数的原始值。
参数的改变在函数之外是不可见的。

通过对象传递,函数改变了对象的属性值,它会改变参数的原始值。
参数的改变在函数之外是可见的。

为什么它俩会不同呢?

值传递有点类似复制粘贴,我们复制了一个文件,修改复制的文件并不会影响原文件。

对象传递传的是一个地址,是把地址传过来,你修改了地址里的值,原始值也是用的同样的地址,所以,原始值也会跟着改变。

如果学过C语言的指针,会很好理解这个地方。

写个例子:

<!DOCTYPE html>
<html>

<head>
<title>刘小妞的栖息地</title>
</head>

<body>

<p id="demo1"></p>
<p id="demo2"></p>

<script>
var a = {'test':123}
var b = 99;

function test1(x) {
x.test = 111;
}

function test2(x) {
x = 100;
}

test1(a);  //函数调用
test2(b); //函数调用

document.getElementById("demo1").innerHTML = "原始值改变:" + a.test;
document.getElementById("demo2").innerHTML = "原始值不变:" + b;
</script>

</body>
</html>
  • JavaScript函数调用

JS中调用函数一般发生在以下几种情况:

1、当事件发生时(当用户点击按钮时)
2、当 JavaScript 代码调用时
3、自动的(自调用)

今天主要介绍JS代码调用函数常用的两种方法。

以函数形式调用,方法如下:

函数名(实参1,实参2,……);

写个例子:

//函数定义
function test(){
    alert("我是刘小妞");
}

//函数调用
test();

这是调用函数的常见方法,但并不是一个好习惯。
全局变量、方法或函数很容易在全局对象中产生命名冲突和漏洞。

作为方法来调用函数

在JavaScript 中,可以把函数定义为对象方法。

写个例子:

//定义一个对象
var girl = {
    firstName:"Liu",
    lastName: "XiaoNiu",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}

//函数作为方法调用
girl.fullName();

一般对象里的方法是匿名函数,调用的时候,格式如下:

对象名.属性名(参数1,参数2,……);

说一下this。

在 JavaScript 中,被称为 this 的事物,指的是“拥有”当前代码的对象。
this 的值,在函数中使用时,是“拥有”该函数的对象。
请注意 this 并不是变量。它属于关键词。无法改变 this 的值。

其实,说白了,this就是一个代词。

我们平时说话的时候,经常用你、我、他。this的作用和他们一样。

上面这个例子中的this指代的是girl这个对象。

this.firstNamegirl.firstName是等价的。

在对象里,经常用this关键词。这样,我们就不用考虑对象名的问题了。

自调用函数是自动被调用,不经常用。

写个例子:

<script>
    (function () {
      alert("sdfsf");
    })();
</script>

上面的匿名函数会自动执行。自调用函数的写法一般是把函数定义放在一个括号里,括号外面跟着一个括号。

  • JavaScript函数返回

函数返回是用return关键词,上面写的例子也都看到了。

当函数执行遇到return关键词的时候,程序会停止,并返回return后面的值。

函数也可以没有返回值,是否需要返回值,是根据函数的功能决定的。

局部变量

在 JavaScript 函数中声明的变量,会成为函数的局部变量。
局部变量只能在函数内访问。

看一个例子:

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>
<p id="demo1"></p>

<script>
var a = 1;    //全局变量

function test(){
    var b = 2;    //局部变量
    document.getElementById("demo").innerHTML = a * b;
}

test();
document.getElementById("demo1").innerHTML = typeof b;

</script>

</body>
</html>

demo里显示2,
demo1里显示undefined

由于局部变量只能被其函数识别,因此可以在不同函数中使用相同名称的变量。
局部变量在函数开始时创建,在函数完成时被删除。

JS函数是前端中很重要的一部分,一定要掌握好,还有其他关于js函数的知识,大家可以搜微信公众号"刘小妞的栖息地"或者识别下面的图片查看。有的文章不能及时更新到这里,也感谢大家的支持,有写的不好的地方,请大家多多指教。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值