JavaScript函数基础

235 阅读4分钟

二 函数

1.函数

函数是一个对象,存储在堆中。

2.函数的创建

  • (1)function fn1(参数1,参数2...){ 函数的语句块; } fn1(参数1,参数2...);
①函数是一个对象,这种普通函数创建,在script被执行时,就放入堆中并且在栈中以函数名作为变量引用堆中这个函数地址。
②函数在创建时,就创建了这个函数名的变量,因为这个变量是全局的,所以会被覆盖。但,覆盖前,仍然可以执行当前函数;覆盖后,函数就不能执行了。
③如果函数中没有使用return关键字,函数返回一个undefined值。
④console.dir(函数);可以将函数对象以函数的形式展现。
⑤函数是对象,因此具备引用关系。
  • (2)匿名函数创建 var fn2 = function(){ 函数的语句块; } ①匿名函数创建,创建好的匿名函数赋值给fn2这个变量。 ②变量什么时候定义,这个变量才什么时候在栈中产生,函数才会被调用。

  • (3)自执行函数 (function(){ })() 会自动执行,以后永远不能再调用。

  • (4)构造函数创建函数 var fn = new Function("参数1","参数2"...,"函数语句块"); ①构造函数创建,每个参数都必须是字符串。 ②除了最后一个参数是函数的语句块以外,前面所有的参数都是该函数的参数。

3.函数的参数

  • (1)参数:创建函数时,在函数后面括号中填写的变量叫作参数。
  • (2)函数如果没有参数,函数的处理是不能变化的,参数的目的就是解决函数在不同情况下解决不同问题。
  • (3)在设计函数时,尽量不要让函数内部与外部有关联,尽量让函数内部是一个独立的个体。(抽象)
  • (4)在JS中,因为js是一种弱类型语言,因此不能对参数约束其类型,这就会造成:因为使用函数者输入的参数不符合需求而造成代码出错,造成白盒测试出错。
  • (5)ES5版本,JS中参数不能设置初始值,不填写参数就是undefined。
  • (6)函数定义时的参数叫作形参,执行时填入的参数是实参,实参是按照形参顺序一一赋值给形参。 如果实参数量小于形参数量,后面的形参值就是undefined。
  • (7)argument.length:实参的长度;函数名.length:形参的长度。
arguments的使用
①当实参数量大于形参数量时,使用arguments。输入的实参保存在arguments中。
②arguments只能出现在函数语句块中。
③用于当前函数的参数不固定数量时。
④arguments.callee              当前函数
arguments.callee.name     当前函数的名字
arguments.callee.caller     调用当前函数的外部函数

4.变量作用域

  • (1)变量只能在局部中使用,叫作局部变量; ①局部变量:被定义在函数内部的变量,使用范围仅在函数内部,并且当前函数执行完成后,这个变量会被销毁,下次这个函数在执行时,会重新定义这个变量,并且变量在函数执行完成后不能被使用。 ②局部变量优先。 ③如果当前函数没有定义局部变量,则直接调用全局变量。 ④如果局部变量只定义变量没有赋值,仍然遵从局部变量优先原则,此时变量为undefined。 ⑤在函数中,只要看到var定义的变量,这个变量一定是局部变量,而且这个变量优先使用。 ⑥当函数中设置了参数,这个参数相当于var定义好的局部变量。 ⑦因为参数本身就是局部变量,所以重新定义不赋值时不起作用。
  • (2)变量在任何地方都可以使用,叫作全局变量。

5.清除函数

函数名=null;
delete不能删除window下任何方法。

6.return

  • (1)函数在执行时,将返回函数中retur内容。
  • (2)如果return后没有内容或者没有return,返回一个undefined;
  • (3)函数返回的作用: ①返回局部变量 ②返回参数 ③跳出,切达,不继续执行
  • (4)函数执行到内部其他函数时,内部函数中的内容全部执行完成后,再执行外部函数其他内容。
  • (5)当需要并列执行多个时,我们可以在一个函数中统一调配执行的顺序。

三 回调和递归

1.回调

  • (1)含义:将一个函数以参数的形式传入到另一个函数中,并且在那个函数中执行。
  • (2)用处: ①回调一般用于当处理某件事情需要等待时,设置回调。 ②当不需要关心具体后续需要处理的事情时,设置回调。
setTimeout方法:
时间间隔函数:setTimeout(超时执行的函数,超时时间,执行函数的参数) 返回一个ID数。
    var id = setTimeout(fn,2000,5);
将函数异步处理。(一定时间后处理问题)
clearTimeout(id);清除时间间隔函数。
setInterval方法:
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

2.递归

(1)含义:函数内执行当前自身函数。