JS基础之函数

本文介绍了JavaScript中的函数,包括函数的定义(声明与表达式)、参数(形式参数与实际参数)、作用域(全局、局部与函数作用域)以及返回值。还讨论了变量提升、this的指向以及立即执行函数(IFEE)的概念,强调了严格模式在JS开发中的重要性。
摘要由CSDN通过智能技术生成

函数

函数(Function

  • 函数也是一个对象
  • 他具有其他对象所有功能
  • 函数中可以储存代码,且可以在需要时调用代码
    语法:
    function 函数名(){
    语句…
    }
    调用函数:
  • 调用函数就是执行函数中存储的代码
  • 语法:
    函数对象()
    使用typeof检查函数对象会返回function

函数的定义方法:

  1. 函数声明
    function 函数名(){
    语句…
    }
  2. 函数表达式
    const 变量 = function(){
    语句…
    }
    cons
  3. 箭头函数
    () =>{
    语句…
    }
    == const fn=() =>{}==

参数

形式参数

  • 在定义函数时,可以在函数中指定数量不等的参数(形参)
  • 在函数中定义参数,相当于在函数内部声明了对应的变量

实际参数

  • 在调用函数时,可以在函数的()传递数量不等的实参
  • 实参会赋值给其对于的形参

- 参数:

  1. 如果实参和形参数量相同,则对应的实参会赋值给对应的形参
  2. 如果实参多余形参,则多余的实参不会使用
  3. 如果形参多余实参,则多余的形参为undefined
    参数类型
  • 在js中不会检查参数的类型,可以传递任何类型的值作为参数

== 在定义参数时,可以为参数指定默认值,默认值会在没有对于实参时生效==

函数每次调用,都会重新创建默认值

  1. 函数声明
    function 函数名([参数]){
    语句…
    }
  2. 函数表达式
    const 变量 = function([参数]){
    语句…
    }
  3. 箭头函数
    // 当箭头函数中只有一个参数时,可以省略()
    ([参数)=>{
    语句…
    }

修改变量时,只会影响当前的变量
修改对象时,如果有其他变量指向该对象则所有指向该对象的值都会受到影响

对象作为参数传递,传递实参时,传递的并不是变量本身,而是变量中储存的值

在函数中,通过return关键字来指定函数的返回值
返回值就是函数的执行结果,函数调用完毕后返回值便会作为结果返回
任何值都可以作为返回值使用(包括对象和函数之类
如果return后不跟任何值,则相当于返回undefined
如果不写return,则函数返回值还是undefined

return—执行的地方 立刻结束

作用域

  • 作用域是指一个变量的可见区域
  • 作用域有两种
  1. 全局作用域
    • 在网页运行时创建,在网页关闭时消耗
    • 所有直接编写到script标签中的代码都位于全局作用域中
    • 全局作用域中的变量是全局变量,可以在任意位置访问
  2. 局部作用域
    • 块作用域是一种局部作用域
    • 在代码块执行时创建,代码块执行完就销毁
    • 在块作用域声明的变量是局部变量,只能在块内部访问,外部无法访问
  3. 函数作用域
    • 函数作用域也是种局部作用域
    • 函数作用域在函数调用时产生,调用结束时销毁
    • 函数每次调用都会产生一个全新的作用域
    • 在函数中定义的变量是局部变量,只能在函数内部访问,外部无法访问

作用域链

当我们使用一个变量时,js会在优先作用域中寻找变量
如果找到了则直接使用,如果没找到,则去上一层作用域中寻找,找到了则使用==(就近)==
如果没找到,则继续去上一层找,依次类推,如果一直没找到,则报错

window对象

在这里插入图片描述

var用来声明变量,作用和let一样,但是var不具有块作用域

  • 在全局中使用var声明的变量,都会作为window对象的属性保存
  • 使用function声明的函数,都会作为window的方法保存
  • 使用let声明的变量,不会存在window中
  • var虽然没有块作用域,但有函数作用域
  • 在局部作用域,若不使用var和let声明,会自动成为window对象的属性,也是全局变量不要使用,一定要先声明

变量的提升

  • 使用var声明的变量,他会在所有代码执行前被声明而不是赋值
    所有我们可以在变量声明前就访问变量

    函数的提升

    -使用函数声明创建的函数,会在其他代码执行前被创建
    所以我们可以在函数声明前调用函数
    

let声明的变量实际也会提升,但在赋值前解释器禁止对该变量的访问

立即执行函数(IFEE)

在开发中应该尽量减少直接在全局作用域中编写代码
所以我们代码应该尽量写在编写作用域中
如果使用let声明的变量,可以使用{}来创建块作用域

是一个匿名函数,并且只会调用一次
可以利用IFEE来创建一个一次性的函数作用域,避免变量冲突的问题
 
            (function () {
                let a = 10
                console.log(111)
            }());//这里要手动加一个分号,不然系统会将两个识别出两个函数调用错误
        (function () {
            let b = 10
            console.log(111)
        }()))
        

this

箭头函数没有自己的this,它的this由外层作用域决定,箭头函数的this和它的调用方式无关
this所指向的对象会根据函数调用方式不同而不同

  1. 以函数形式调用时,this指向的是window
  2. 以方法形式调用时,this指向的是调用方法的对象

严格模式

  • 在严格模式下,语法检查变得更严格
    1. 禁止一些语法 2. 更容易报错 3.提升了性能
  • 在开发中应尽量使用严格模式
"use strict" // 全局的严格模式
function fn(){
"use strict"  //函数的严格模式
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值