zoukankan      html  css  js  c++  java
  • JS理解之闭包

    首先,闭包是什么?这个问题,百度上一大堆,然后我也是,现在学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了你们法眼。

    我认为的闭包是,就是取到,不是在自己作用域内或者按照js的规则,娶(取)不到的老婆(值)。
    也因为js 的一个弱类型,特性,可以返回function 函数对象,也就造成了闭包这个概念,所以这个闭包的概念在其他语言中也有。条件是,1.弱,2.可以返回函数对象。

    好,接下来,直接上例子讲解:
    算是自我的一种复习吧

    第一种:

    function a(){
    var s = "name";
    return s;
    }
    var s = a()//name;

    这是最为普通的,原谅我的用词,“普通”

    第二种:

    function s(){
    var dd = 'name;
    return function(){
    return dd;
    }
    }
    //调用
    var t = s();//这个得到的是 函数 function(){return dd}
    再次执行 t();//此时执行得到的是 dd 为name;

    那么,我在原来的基础上,再添加一点,考一下大家

    var dd = "我是一个屌丝";
    function s(){
    var dd = 'name;
    return function(){
    return dd;
    }
    }
    结果为什么?




    .
    .
    .
    .
    .
    .
    .
    好吧答案还是 : name ;
    为什么呢?一个原型链,这个是js 的特性,还有一个是js代码的执行过程。

    再来:
    第三种;
    先写一个面试题吧,我最近在看

    for(var i=0;i<5;i++){
    setTimeout(function(){
    alert(i)
    },1000)
    }
    结果,为什么?
    我所理解的是一个延迟效应,setTimeout,
    结果为 55555

    怎么解决,利用闭包

    for(var i=0;i<5;i++){
    (function(i){
    setTimeout(function(){
    alert(i)
    },1000)
    }(i))
    }
    这样就会循环出来,当然,如果你去试过 的回发现,是无序的。那么怎么解决这个问题,
    据说用的是es6 promise,这个我目前还不会吗,学起来,到时再补充吧

    基本上,闭包就是个样子,休息一会,准备去吃饭了

  • 相关阅读:
    linux下的watch命令
    Erlang运行时的错误
    Redis查看帮助文档
    PO Box简介
    用erlang写的kmp算法
    laravel全过程
    artdialog 弹出框
    支持触屏版的旋转幻灯片
    android生成APP的名字,图标,开机动画
    使用Eclipse构建app网站应用
  • 原文地址:https://www.cnblogs.com/xsk-style/p/6757434.html
Copyright © 2011-2022 走看看