zoukankan      html  css  js  c++  java
  • 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( )函数的值。

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/markniefeng/p/10561870.html
Copyright © 2011-2022 走看看