JavaScript——函数(上)

文章详细介绍了JavaScript中函数的两种定义方式——声明式和赋值式,以及函数的参数、形参和实参的概念。提到了匿名函数和自执行函数的用法,特别是自执行函数如何避免污染全局环境。此外,还讨论了arguments对象在处理函数参数时的作用,以及return关键字的功能。最后,文章阐述了JavaScript的预解析机制,包括变量和函数的声明提升规则。
摘要由CSDN通过智能技术生成
一、函数的语法
  1. 函数的定义:有两种定义方式 声明式赋值式

(1)声明式:(调用可以在定义之前或者定义之后)

function 函数名(){
    要执行的代码段
}
// function是一个关键字,函数名自定义,定义规则和变量的定义规则相同

//函数调用
函数名()

(2)赋值式:(调用只能在定义之后)

var 变量名 = function 函数名(){
    要执行的代码段
}
  1. 函数的参数

我们在定义函数和调用函数的时候都出现过 ( )

这个 ( ) 的作用就是用来放参数的位置;参数分为两种 形参 和 实参

  • 声明函数时候带进去的那个参数叫形参

  • 调用函数的时候给形参进行赋值的实际是实参

  • 注意:

形参和实参的个数不对应时:

形参多于实参时,多出来的形参,值为undefined

形参少于实参时,多出来的实参,则没有意义

  1. 函数的调用

在函数中所使用的变量,也就是在函数外不能调用

如果不给形参赋值,那么在函数中使用时,形参的值为undefined

通过实参来给形参赋值

二、匿名函数
//当将一个函数赋值给一个变量的时候,这个函数的名字就没有用了,所以我们可以将这个函数名称省略:
//函数名则不能再进行调用
//这种没有名字的函数就叫做匿名函数
var 变量名 = function (){
    要执行的代码段
}
//匿名函数不能单独存在,会报错:
function(){
    console.log(a)
}
//将这个函数用小括号括起来就不会报错,
//在后面加小括号就表示调用匿名函数,这种定义并调用函数的语法,叫做自执行函数。
//自执行函数的好处:独立的作用域,不会污染全局环境!
(function(){
    console.log(a)
})()
//自调用函数也可以不给函数加小括号,其他常见形式:
(function(){
  console.log(a);
}());
!function() {
   console.log(a);
}();
+function() {
   console.log(a);
}();
-function() {
   console.log(a);
}();
~function() {
   console.log(a);
}();
//这种函数也是可以传参的
(function(a,b){
    var c = a + b;
    document.write(c);
})(1,2);
三、argument对象 和 return
  • arguments对象:(只要函数才有arguments对象)

是ES6之前函数中自带的对象,专门用来接收函数调用时所传递实参,该对象返回的结果是一个伪数组,伪数组:只具有数组的下标(索引或位置)和length(个数)属性,不具有数组的方法

(1)具有数组的length属性

(2)按照索引的方式进行存储的

(3)它没有真正数组的一些方式:pop() push()等等

function fn(){
    //由于arguments对象这个单词有点长,因此专门创建一个变量来接收该对象
    var arg=arguments
    console.log(arg)
    console.log(arg.length)
    //arg[o]:专门用来获取对象中指定下标所对应的值
    // console.log(arg[o])
    // console.log(arg[2])
    //获取arg对象中所有的实参(元素)//遍历的是每个实参所对应的下标
    for(var i=0;i<arg.length;i++){console.log(i,arg[i])
}
fn(10,20,30,40,50)
  • return

function  fn(){
    //return在返回结果的时候,只能返回一个结果,不能返回多个
    //return关键字除了可以给函数调用返回结果,还可以结束函数运行
    return 需要返回的结果;
}
var 变量名=fn()
console.log(变量名)

(1)我们函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名( )通过return实现的

(2)只要函数遇到return 就把后面的结果返回给函数的调用者函数名( )=return 后面的结果

return总结:

(1)终止代码继续运行

(2)函数运行后返回一个结果,只能返回一个

四、预解析

1.预解析:在代码执行之前,先对代码进行解释,被称为预解析也就是声明提升

在js中有两个地方会出现声明提升:

(1)使用var关键字创建的变量具有声明提升

(2)使用function函数名( ){ }创建的函数具有声明提升

注意:赋值式函数会按照var关键字的规则进行预解析

预解析总结:

(1)匿名函数赋值给变量的定义方式,预解析时遵循变量的预解析规则,不会将函数代码预解析

(2)预解析的时候,会将定义提前放在内存中,不会提前将赋值放在内存中

(3)如果变量名和函数名同名了,保留函数预解析,忽略变量预解析

因为函数预解析其实包含了赋值的过程,函数定义放在内存中的时候将函数的代码也放在内存中

变量的预解析只有空间,没有值,所以如果是先预解析变量,那后面的函数预解析赋值就将空间中放入了值,如果是先预解析的函数,再次预解析变量的时候,空间已经存在了,再次定义空间也是没有意义的。

(4)省略var定义的变量是不会有预解析的

(5)js代码如果报错了,那后面的代码就不会执行了

(6)不会执行的代码中有变量或函数定义也会预解析,因为预解析在执行之前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值