博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DAY56-前端入门-javascript(三)
阅读量:5334 次
发布时间:2019-06-15

本文共 1359 字,大约阅读时间需要 4 分钟。

目录

一、函数回调

1.什么是函数回调

​ 将一个函数作为另一个函数的参数传入

2.实例

function callback(data) {        console.log(data);    }    function func(callback) {        var data = [1,2,3,4,5];        callback(data);    }    func(callback);

二、闭包函数

1.什么是闭包函数

​ 函数的嵌套定义,内层函数就是闭包

案例

function a_fn() {    var data = [1,2,3,4,5];    function b_fn() {        console.log(data);    }    b_fn();}a_fn();

2.为什么会产生闭包

function fu() {        var a = 10;//局部变量}console.log(a)//报错

在外部使用局部变量的方法:

  • 函数回调
  • 闭包
  • 返回值
  • 提升作用域

使用闭包的原因

​ 1.函数会产生局部作用域

​ 2.在外部另一个函数中使用局部变量,只能使用函数回调或闭包的方法

​ 3.不能使用函数回调(函数已有固定参数,或不能拥有参数),只能将函数定义到拥有局部变量函数的内部,所以只能使用闭包

3.闭包的优点

​ 1.外部函数不需要强制拥有参数以及返回值。

​ 2.外部函数的局部变量也无需提升作用域,可以保证参数的安全性。

​ 3.内部函数也不需要强制拥有参数以及返回值,便可以直接使用外部函数 的局部变量。

4.闭包可以解决的问题

①局部变量的持久化

function outer() {    // 请求得到的数据,如果不持久化,方法执行完毕,数据就被销毁    var data = [1,2,3,4,5];    console.log(data);    //通过闭包解决该类问题,所有代码均可以随意自定义    function inner() {        return data;    }    //数据被inner操作返回,inner数于outer    return inner;}var inner = outer();console.log(inner());

②变量的污染

var lis = document.querySelectorAll('li');//循环绑定for (var i = 0; i < lis.length; i++) {    // 原理:一共产生了5个外层函数,存储的形参i的值分别为0,1,2,3,4    // 内层函数也产生了5个,且和外层函数一一对应,打印的i就是外层函数的形参i    (function (i) {        lis[i].onclick = function () {            alert(i);        }    })(i)}console.log(i);//点击事件一定晚于该逻辑//所以再次去点击,弹出i的值,永远是5// 该问题就称之为变量污染

转载于:https://www.cnblogs.com/xvchengqi/p/9800168.html

你可能感兴趣的文章
4,7周围玩家
查看>>
关于webpack升级过后不能打包的问题;
查看>>
vue - 生命周期
查看>>
Python正则表达式
查看>>
Linux进程间通信--命名管道
查看>>
UVa 10970 - Big Chocolate
查看>>
js输出
查看>>
H5多文本换行
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>