1

JavaScript函数

函数基本概念

函数就是一段可以重复使用的代码块,用于完成特定的功能,能执行任意次。
函数是一个Function类型的对象,他有自己的属性和方法。包括两个重要的内置属性。

  • arguments 函数的参数
  • this 调用上下文

JavaScript是一门函数式编程语言,他的函数既是语法也是值,能作为参数传递给一个函数,也能作为一个函数的结果返回。
函数的执行离不开作用域,构建出的闭包,也要借助作用域才能解决许多棘手的问题。

作用域链

每个函数都有自己的作用域,而一个函数可以嵌套另一个函数,相当于一个作用域能关联另一个作用域,作用域之间相互关联就像一条锁链将他们链接在一起,而这条锁链就是作用域链,其最顶层是全局作用域。作用域链能够保证变亮有序的访问,在作用域链中搜索变量的具体过程如下。

  1. 从作用域首部开始查找,也就是调用变量时所处的作用域。
  2. 如果比配到指定的名字的变量,就停止搜索,取得变量的值,否则转到上级作用域中,继续搜索。
  3. 如果一直没有匹配上,那么所搜将持续到全局作用域,如果全局作用域也没有找到,那么说明该变量尚未声明,终止搜索。

函数的创建方式

  1. 函数声明 function funcName () {} 最好不要在。块级作用域使用函数声明 if、for语句中。
  2. 函数表达式 let funcName = function () {}

变量提升

函数声明存在提升,函数声明的优先级高于变量声明。

this 调用上下文

this的指向依赖与函数的调用方式。
总共有四种方式调用JavaScript中的函数:

  1. 普通函数:作为普通函数调用时,this会指向全局对象(window),但在严格模式中,this的值是undefined。func() // 普通函数
  2. 对象方法:作为对象的方法被调用时,this会指向调用方法的对象。obj.func() //对象方法
  3. 构造函数:作为构造函数被调用时,与new运算符组合使用会创建一个新的对象,this会指向这个新的对象。new func() // 构造函数
  4. 间接调用:通过函数的方法apply()call()进行间接调用,可自定义this的指向。func.call(obj) // 间接调用

函数的参数

函数名和形参名都不能定义为arguments。
函数的参数分为两种。

  1. 形参:函数定义时的参数叫做形参。
  2. 实参:函数调用时传入的参数叫做实参。

注意:形参和实参的个数可以不想等。
函数内部有特殊的对象:arguments,这是一个数组对象,管理这实参列表。通过数字索引获取对象位置的参数,可以使用length属性,获取传入实参个数。

函数的重载

函数的重载:函数名称相同,参数不同,根据参数的不同,去执行不同的操作
由于JavaScript中同名函数不会用形参个数进行区分,所以JavaScript中没有重载,如果定义了两个相同的函数名,后面的函数会覆盖前面的

函数的属性和方法

属性:length:希望接收到的参数的个数
方法:

  1. call() 第一个参数设置this指向,后面接受任意多个实参
  2. apply() 第一个参数设置this指向,后面接受实参数组
  3. bind() 第一个参数设置this指向,后面棘手任意多个实参,返回值是一个绑定指定对象的新函数

call和apply最大的好处就是扩充函数说依赖的作用域,让要调用的方法和对象之间解藕


前端styleUp
7 声望0 粉丝

前端up!up!up!