• JS函数声明及函数表达式相关


    函数是什么

    把一些代码语句进行封装,通过调用的方式来使用,执行里面的语句。可以把函数看做一个工具,可以直接拿来用的东西,避免了重复性的工作。

    一个简单的函数:

    为什么要用函数

    • 将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动。

    • 简化编程,让编程模块化。

    • 大量的功能都需要封装实现,函数是必须的。

    函数怎么用

    函数声明与函数表达式

    函数声明举例:

    • 函数的形参:a,b

    • 函数的实参:1,2

    • 注意:实际参数和形式参数的个数,要相同。

    • return的作用是结束方法。该函数会在return语句之后停止并立即退出.

    函数表达式举例:

    两则的区别:

    • 函数声明会率先读取,函数调用可以放在前后都可以。

    • 函数表达式必须要等到执行到它所在的代码行,才会被解释调用,因此调用必须放在表达式后面。

    预编译

    四部曲,预编译可以解决函数执行问题

    • 创建AO对象

    • 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

    • 将实参值和形参值统一

    • 在函数体里找函数声明,值赋予函数体

    this

    this指的是,调用函数的那个对象。this永远指向函数运行时所在的对象。

    解析器在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this。

    根据函数的调用方式的不同,this会指向不同的对象:【重要】

    • 1.以函数的形式调用时,this永远都是window。比如fun();相当于window.fun();

    • 2.以方法的形式调用时,this是调用方法的那个对象

    • 3.以构造函数的形式调用时,this是新创建的那个对象

    • 4.使用call和apply调用时,this是指定的那个对象

    需要特别提醒的是:this的指向在函数定义时无法确认,只有函数执行时才能确定。

    伪数组arguments

    • 命名的参数只是提供便利,但不是必须得,arguments对象可以和命名参数一起使用。

    • arguments代表的是实参。有个讲究的地方是:arguments只在函数中使用。

    • arguments的值永远与对应命名参数的值保持同步。

    • arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

    • 没有传递值的命名参数将自动被赋予undefined值。

    • 返回正在执行的函数:arguments.callee。在使用函数递归调用时,推荐使用arguments.callee代替函数名本身。

    • arguments是伪数组,是因为:arguments可以修改元素,但不能改变数组的长短。

    重载

    重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

    • ECMAScript没有重载,由于不存在函数签名

    • ECMAScript如果定义了两个名字相同的函数,则该名字只属于后定义的函数。

    • 模仿重载:可以通过检查传入函数中的参数数量和类型并实现不同功能

    函数的属性和方法

    每个函数都包含两个属性:

    • length: 表示希望接收命名参数的个数

    • prototype: 非常重要的,很多方法都保存在prototype名下

    每个函数包含两个非继承的方法:

    • apply(): 接收两个参数,一个是在其中运行函数的作用域,二是参数数组(可以是Array实例,也可以是arguments)

    • call(): 第一个参数是this没有变化,变化的是其余参数直接传递给函数。

    两个方法的用途都是在特定的非作用域中调用函数,实际上等于设置了函数体内this对象的值。

    他们两个的区别就在于接收参数的方式不同。

    ps: 具体怎么选择需要考虑传入的参数,怎么方便怎么来

    此外两个方法真正强大在于可以扩充函数赖以运行的作用域,对象不需要与方法有任何耦合关系。

    此外es5还定义了一个bind( )方法,创建一个函数的实例,其this指向会被绑定传给bind( )函数的值。

  • 相关阅读:
    暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns
    Help Jimmy ~poj-1661 基础DP
    POJ1015 && UVA
    FatMouse's Speed ~(基础DP)打印路径的上升子序列
    Max Sum Plus Plus
    Column Addition~DP(脑子抽了,当时没有想到)
    区间的连续段~ST表(模板题)
    Exponial~(欧拉函数)~(发呆题)
    wyh的数列~(坑爹题目)
    wyh的物品~(二分)
  • 原文地址:https://www.cnblogs.com/markniefeng/p/10561870.html
Copyright © 2020-2023  润新知