js中关于函数的理解

1.什么是函数?

函数是被调用执行时可以重复使用的代码块

函数也是一种数据类型  function

2.函数的创建和执行

2.1.声明式

 2.2.赋值型

 在赋值型的定义函数中 function 后面的函数名可以省略,就算写了函数名也没有用,因为此时的函数调用变成了 me();  所以这种在这种定义函数的方法里,函数名可有可无

不写函数名的函数叫匿名函数 匿名函数一定要给一个变量进行接收,否则是没有用的

2.3.自调用函数,只能执行一次,立即执行iffe

IIFE(Immediately Invoked Function Expression,立即 调用函数表达式)是一种特殊的JavaScript函数写法,一旦 被定义,就立即被调用。

 function是一个关键字,函数名自定义,定义规则和变量的定义规则相同

2.4.带参数的函数

圆括号里面的c是函数内部创建的变量,属于局部变量,相当于在函数内部创建了一个 var c;

函数被调用的时候 fn(6),此时的6就是实际参数,相当于 把 6 赋值给了 c  即 c = 6; 

圆括号里面可以写多个变量,用逗号(,)隔开,如果调用的时候没有进行赋值,那么此时的形式参数就是undefined

 2.5.带返回值的函数

 在一个函数中,如果没有写返回值,console.log(typeof add(1, 2, 3)) , 运行之后的类型会是undefind ,没有返回值的话,进行数学运算的话,会运行代码,但是会得到NaN,比如:console.log(add(1, 2, 3) / 3); 这个结果就是NaN 

ruturn 只能返回一个数据,如果返回多个数据用逗号隔开,只会返回最后一个数据

return的其他作用  return可以结束整个函数,函数执行到return就停止运行后面的代码,如果在函数中不希望后面的代码继续运行了,就在函数中添加return

不加return 函数默认返回undefined  ,函数里面写了return 但是后面不加东西,默认返回undefined

3.关于函数预解析

函数的定义,是一整段代码,会将整段代码调整到最前面

函数的定义比变量的定义,多了一个隐形的赋值过程  --- 变量定义,内存空间中没有数据,函数定义内存空间中是有数据的,定义好的函数空间中的数据也是可以直接赋值修改的

当预解析的时候,函数和变量同名了,此时会忽略变量的定义保留函数定义

预解析指,执行代码前先分析代码中是否有变量或函数的定义,如果没有,那么预解析就结束了,如果有,就将代码中分析到的变量定义或者函数定义,调整顺序,放在所有代码的最前面,此时变量只是被定义并没有赋值,为undefined,此时的函数定义的是整个代码块,内存空间存储的也是整个函数代码块,所以函数定义的时候内存中是有数据的

4.作用域

定义在不同地方的变量,可以在指定的范围内使用,总之,作用域就是一个能起到的作用的区域

4.1.局部变量

被定义在函数内部的变量,局部变量的作用域就在局部内

  变量只在其定义时所在的function内部有意义,如图所示:

 fun函数就是a的“作用域”,变量a被称为局部变量。

形式参数也是局部变量,如果一个函数有形参,这个函数的形参会参与其函数内部的预解析,在函数内部先进行形参赋值,在执行代码的预解析,就是函数调用,先有形参预解析,然后给形参赋值,接着函数内的代码开始预解析

在初次给变量赋值时,如果没有加var,则将定义为全局变量。

4.2全局变量

没有被包含在任何函数内的变量 全局变量的作用域:任何地方都可以使用

总结:全局变量可以在局部内使用,也可以在全局中使用,局部变量只能在局部内使用,不能在全局中使用---即小作用域可以使用大作用域中的变量,但是大作用域中不能使用小作用域中的变量

5.作用域链

5.1作用域链的规则一

当我们在任何一个作用域中,使用将这个变量当做数据去赋值、运算、输出)一个变量的时候,现在当前作用域中寻找这个变量,如果在该作用域中定义了这个变量,那么可以使用这个变量,如果这个作用域没有定义过这个变量,就会去上一级作用域中寻找,直到全局,如果找到了定义这个变量,那么可以使用,如果找不到,就会报错

5.2作用域链的规则二

当我们在任何一个作用域中给变量进行赋值的时候,首先会先在当前作用域中找是否定义过这个变量,如果当前作用域定义过,那么赋值成功,如果没有定义过,那么会依次向上级作用域中寻找这个变量的定义,直至全局,如果找到了,就给找到的这个变量定义进行赋值,如果没找到,此时会在全局定义这个变量并赋值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值