函数及其作用域

文章目录

JavaScript基础(函数篇)

函数基本概念

函数是什么?

​ 1.函数是一段封装的代码

​ 2.是function 函数名(参数){事件处理程序},或 var 函数名 = function(参数){事件处理程序} //这里的参数是形参

​ 3.是这样被调用的:函数名(参数) //这里的参数是实参

函数有什么用?

​ 1.代码封装为函数后可以在多种情况下更改参数重复使用

​ 2.可以封装一段特定功能的代码,然后通过函数名调用,实现对该代码重复使用(对分散代码整合封装)

怎么创建并使用一个函数?

1.创建:function 函数名(参数){事件处理程序} //若不需要参数可以不传

2.调用:函数名(参数) //若定义了形参,则要传递实参

//1.函数声明
function fn1(a,b){
    //处理程序:
    alert(a+b)
}
//调用:
fn1(1,2)
//2.字面量定义
var fn2 = function(a,b){
    alert(a+b)
}
fn2(1,2)

函数的参数

形参:

​ 出现在函数创建时候的小括号内

​ 含义:占位符,本身没有真实数据

​ function 函数名(形参1,形参2,…){函数体}

​ 参数类型多样,函数也可以作为参数进行传递

实参:

​ 出现在函数调用时候的小括号内

​ 含义:可以传入实际的数据

​ 用法:函数名(实参1,实参2),实参的数量根据形参的数量而定

函数的返回值

返回值是什么?

返回值:函数执行完后,可以把执行的结果通过return语法返回给调用者

例如:

function add(num1,num2){
    return num1+num2
}
var res = add(1,2)
alert(res)  //弹出3

需注意的点:

​ 1.如果函数没有使用return语句,那么函数也有默认的返回值:undefined

​ 2.如果写了return,但后面没有内容,也为undefined

​ 3.执行了return后,在return语句后面的代码将不执行

​ 4.一个函数只能有一个返回值,同时返回值的类型不定,甚至可以是函数

arguments的使用

arguments:

​ arguments对象和Function是分不开的。因为arguments这个对象不能显式创建。arguments对象只有函数

开始时才可用。

通俗一点就是,arguments此对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。

​ arguments 不需要明确指出参数名,就能访问它们,例如:

function fn(){
    console.log(arguments)
}
fn('tom',[1,2,3],{name:'Janny'})
//打印出一个伪数组 Arguments,里面包含三个实参分别为第一二三个元素

作用: 通过 arguments获取到函数参数的个数 【不确定函数到底有多少个参数】

匿名函数和自调用函数

匿名函数是什么?

匿名函数就是没有函数名的函数

示例:

var fn = function(){代码...}

可以把匿名函数赋值给一个变量,也可以让匿名函数自己调用自己

但是匿名函数不能单独使用

什么是自调用函数?

定义:封装好函数了之后,立即执行

示例:

 (function(){
     执行代码
 }) ()

匿名函数可以自己调用自己

作用域

什么是作用域?

作用域:是一个变量和函数可以起作用的区域

作用域分为全局作用域局部作用域

全局作用域:

​ 变量定义在函数外部,可以在所有地方使用

​ 例如:

var age = 18
function fn(){
    console.log(age)
}
fn()//打印出18

局部作用域;

​ 变量定义在某个函数内部或是函数的形参,只能在函数内部使用

​ 例如:

function fn(){
    var a = 100
    console.log(a)
}
fn()  //打印100
console.log(a)  //报错,a没定义

作用域链:

​ 当访问一个变量时,会先从本作用域中去寻找此变量,如果找不到该变量,就去上一级作用域里面寻找,一直向上寻找就形成了一个作用域链

预解析:

​ 1. js 代码执行先执行预解析

​ 2. 先进行变量提升: 把变量声明提升到当前作用域的最上面,不包括变量的赋值

​ 3. 函数提升: 把函数声明提升到当前作用域的最上面,不包括函数的调用

tips:如果函数名和变量名一样,函数优先

本作用域中去寻找此变量,如果找不到该变量,就去上一级作用域里面寻找,一直向上寻找就形成了一个作用域链

预解析:

​ 1. js 代码执行先执行预解析

​ 2. 先进行变量提升: 把变量声明提升到当前作用域的最上面,不包括变量的赋值

​ 3. 函数提升: 把函数声明提升到当前作用域的最上面,不包括函数的调用

tips:如果函数名和变量名一样,函数优先

上一篇:console.log 带时间输出


下一篇:函数的扩展