JavaScript 用箭头函数 => 来写个闭包

    xiaoxiao2021-12-13  46

    简单的知识点过渡

    //我们一步一步演化,这样好过干巴巴的介绍箭头函数的语法。 顺便说一句 => 就是箭头函数

    箭头函数this与普通函数的区别

    普通函数:this 指向调用函数的对象箭头函数:this 就是上下文中的this

    关于 this

    普通的匿名函数 与 【箭头函数】

    //这是一个普通的匿名函数 var foo = (function() { return "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!"; }); //这是对应的箭头函数 var foo = () => "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!"; //当然如果有强迫症的话也可以写成这样: var foo = (() => "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!"); //或这样: var foo = (() => "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!" ); //测试 alert(foo());//弹窗:大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!

    带参数的匿名函数 与【箭头函数】

    //这是一个带参数的匿名函数 var foo = (function(n) { return n*10; }); //这是对应的箭头函数 var foo = (n) => n*10; //顺便说一句:向上面没有参数的情况,括号是一定要的。但是如果只有一个参数可以省掉,像这样: var foo = n => n*10; //测试 alert(foo(1));// 10 alert(foo(2));// 20 alert(foo(3));// 30

    带参数的匿名函数 与 【箭头函数】

    //这是一个带参数的匿名函数 var foo = (function(n) { return n*10; }); //这是对应的箭头函数 var foo = (n) => n*10; //顺便说一句:向上面没有参数的情况,括号是一定要的。但是如果只有一个参数可以省掉,像这样: var foo = n => n*10; //测试 alert(foo(1));// 10 alert(foo(2));// 20 alert(foo(3));// 30

    多行语句的情况

    //匿名函数这样 var name = function name(str) { str = "---------" + str + "-----------"; return str; }; //这是对应的箭头函数(这就长的差不多了) var name = str => { str = "---------" + str +"-----------"; return str; }

    返回一个对象的情况

    //匿名函数这样 var boy = function boy(str) { return { name: str }; }; //这是对应的箭头函数 var boy = str => ({name:str}); //测试 var boy = str => ({name:str}); var me = boy("笨笨"); alert(me.name);

    下面我们正式开始

    //---------------------------------------- //我们来写个闭包函数。实现个简单的记数器。 //用两种方式:1、普通的匿名函数,2、吊炸天的箭头函数 => //初始从 1 起步,步长就用 ++ 好了。 var init = 1; //这是一个闭包函数。 匿名函数写法 var closure = function(n) { //本例中内层函数是调用了外层函数的参数来实现的闭包。 //当然你也可以向往常那样在这一层里声明局部变量,给下面的内层函数用。 //var n = 100; return function() { return n++; }; }(init); //这是对应的箭头函数 var closure = (n => (() => n++))(init); //---------------------------------------- // 下面我们跑个循环,测试下输出的效果,正常来说会看到 1到20 这些数字。 var arr = []; for (var i = 0; i < 20; i++) { arr.push(closure()); } alert(arr);

    一不做二不休,再来个广告吧

    转载请注明原文地址: https://ju.6miu.com/read-950154.html

    最新回复(0)