JS高级 04.函数高级应用

函数高级应用

1.函数的定义方式

(1)、函数声明

function fn(){

console.log('this is a function')

}

(2)、函数表达式

var fn = function(){

console.log('赋值表达式函数')

}

(3)、内置构造函数的形式

var fn3 = new Function("num1", "num2", "return num1+num2");

  console.log(fn3(2, 3));

推荐使用第二种形式,第三种用的相对较少,但也是必须掌握的内容。

2.函数的调用方法

(1)、函数名()

var fn1 = function () {

    console.log("函数名()");

  }

  window.fn1();

  fn1();

  1. 自调用

var fn2 = (function () {

    console.log("自调用");

  })();

  1. call()调用

fn1.call();

  1. 对象中的函数调用

var obj1 = {

    name: "小刚",

    say: function () {

      console.log(this.name + "喜欢吃辣条!")

    }

  }

  obj1.say();

  1. 数组中函数调用

var arr = [

    100,

    "哈哈",

    function () {

      console.log(this);

      console.log(this[1] + "我是数组中的元素,也是函数");

    },

    function () {

      console.log("66666");

    },

    true

  ];

  console.log(arr[2]);

  arr[2]();//

  arr[3]();

  1. 函数作为参数的调用

function fn3(x) {

    x();

  }

  fn3(function () { console.log("我是函数也是参数"); });

(7)、函数作为返回值的调用

function fn4() {

    return function () { console.log("我是函数也是返回值!") }

  }

  fn4()();

3.闭包

  1. 、定义

闭包就是能够读取其他函数内部变量的函数,由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成 “定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用途:

可以在函数外部读取函数内部成员

让函数内成员始终存活在内存中

  1. 、原理

 实际上在js的作用域机制中,有一个作用域是永恒的,就是window全局作用域,只要浏览器窗口不关闭,全局作用域是不会销毁的,这个windows全局作用域就是永恒的,在全局作用域中定一个函数,无论调用几次,这几次调用都可以共享操作同一个全局变量。

         然而局部作用域不是啊,它只是在函数调用的时候有效,函数调用完成之后,局部作用域就关闭了,也也就意味着局部变量就失效了。所以我们在全局作用域下获取不到局部变量,再其他的作用域下也获取不到局部变量。

      但是闭包不一样啊,可以让它的父函数作用域永恒,像windows全局作用域,一直在内存中存在。这也是闭包的本质。也是咱们上课讲的闭包的第二个作用锁住局部变量。当闭包函数调用时,它会动态开辟出自己的作用域,在它之上的是父函数的永恒作用域,在父函数作用域之上的,是window永恒的全局作用域。闭包函数调用完了,它自己的作用域关闭了从内存中消失了,但是父函数的永恒作用域和window永恒作用域还一直在内存是打开的。闭包函数再次调用时,还能访问这两个作用域,可能还保存了它上次调用时候产生的数据。 只有当闭包函数的引用被释放了,它的父作用域才会最终关闭(当然父函数可能创建了多个闭包函数,  就需要多个闭包函数全部释放后,父函数作用域才会关闭)。

(3)、闭包之访问函数内部变量

一些关于闭包的例子

案例一:

var name = "this window";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值