• DAY56-前端入门-javascript(三)


    一、函数回调

    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
    // 该问题就称之为变量污染
    
  • 相关阅读:
    洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)
    洛谷P4502 [ZJOI2018]保镖(计算几何+三维凸包)
    [Codeforces1137D]Cooperative Game
    洛谷P2287 [HNOI2004]最佳包裹(三维凸包)
    洛谷P4724 【模板】三维凸包
    洛谷P4526 【模板】自适应辛普森法2(Simpson法)
    A + B Problem
    Java中方法next()和nextLine()的区别
    发现环
    分考场
  • 原文地址:https://www.cnblogs.com/xvchengqi/p/9800168.html
Copyright © 2020-2023  润新知