JS函数

作者: 招投标秘籍 | 来源:发表于2021-04-06 22:48 被阅读0次

1.如何定义一个函数

1.1定义具名函数

function 函数名(形式参数1 形式参数2){
  语句
  return 返回值
}

1.2定义匿名函数

上面的具名函数去掉函数名就是匿名函数

let a =function(x,y){
  return x+y
}

1.3定义箭头函数(三种表达式)

 第一种
let f1 = x =>x*x
  console.log(f1(9))//81
第二种
 let f2=(x,y)=>x.y
  console.log(8,9)//72
第三种
let f3=(x,y)=>{
      console.log('hi')
      return x+y
  }
注意事项如果后面有两句话需要用上花括号 写return返回 函数不知道能返回什么

2.函数的调用时机

函数的调用时机不同结果也会不同,我们可以来看下下面几个例子

let a = 1
function fn(){
  console.log(a)
}//打印不知 因为没有调用函数
图片.png
let a = 1
function fn(){
  console.log(a)
}
fn()//打印为1

let a = 1
function fn(){
  console.log(a)
}
a = 2
fn()//2

let a = 1
function fn(){
console.log(a)
}
fn()//1
a = 2

从以上的例子我们可以知道函数的调用时机不同,函数的值也不同,这就和刻舟求剑一样。

3.函数的作用域

3.1函数作用域的定义

每个函数都会默认创建一个作用域,我们首先也通过几个例子来进行理解.

function fn(){
  let a = 1
}
console.log(a) // a,这里不能打印出1,因为a=1在函数里面,函数没有执行,就算执行也是访问不到的

3.2全局变量和局部变量定义

在顶级作用域和window是全局变量,其他的都是局部变量.window不一定放在外面.比如

function f1(){
    window.c=2
}
f1()
function f2(){
    console.log(c)
}
f2()//2
image.png

3.3作用域规则

1.如果有多个作用域都为同名的变量a,那么向上取最近的作用域
2.查找作用域与函数执行无关

function f1(){
  let a = 1
  function f2(){
    let a = 2
    function f3(){
      console.log(a)
    }
  a = 22
  f3()
  } 
  console.log(a)
  a = 100
  f2()
}
f1()1 22
image.png

4.闭包

如果一个函数用到了函数和外部的变量就叫做闭包,后面用法还会详细再讲.

5.形式参数

形式参数就是非实际参数,比如

function add(x,y){
    return x+y
}//x和y就是形式参数,add(1,2)传参数的时候x和y的值被复制了一份,这个就是实际参数

6.返回值

只有函数才有返回值,每个函数都有返回值

function hi(){
 return console.log('hi') 
}
hi()//返回值为undefined

7.调用栈

7.1调用栈的定义

JS引擎在调用一个函数的时候前,需要把一个函数的环境push到一个数组里面,这个数组就是调用栈,等函数执行完就会跳出这个环境.


image.png

8.函数提升

add(1,2)
function add(x,y){
  return x+y
}//3 率先加载

本文先说到这里,下次有机会在写一下this和arguments.
本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源.

相关文章

网友评论

    本文标题:JS函数

    本文链接:https://www.haomeiwen.com/subject/xrvskltx.html