zoukankan      html  css  js  c++  java
  • JS中的作用域和闭包

    作用域:在编程语言中,作用域控制着变量与参数的可见性及生命周期。JS确实有函数作用域,那意味着定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。

    var a = 1;
    var fs = function (){
        var b = 2;
        var c = 4
        var fun = function (){
            var c = 3;
            alert(a) //输出1
            alert(b) //输出2
            alert(c) //输出3
        }
        fun();
    }
     fs();

    闭包:作用域的好处是内部函数可以访问定义它们的外部函数的参数和变量(除了this和arguments)。我们通过调用一个函数的形式去初始化一个函数myObject,该函数将返回一个对象。此函数定义了一个value变量。该变量对increment和getValue方法总是可用的,但函数的作用域使得它对其他程序来说是不可见的。

    //返回一个对象
    var myObject = (function (){
        var value = 0;
        return {
            increment: function (inc){
                value += typeof inc === 'number' ? inc : 1;
                    },
            getValue: function (){
                return value;
            }
        }
    })();

    我们并没有把一个函数赋值给myObject。我们是把调用该函数后返回的结果赋值给它。注意最后一行的()。该函数返回一个包含两个方法的对象,并且这些方法继续享有访问value变量的特权。上例中getValue方法可以访问它被创建时所处的上下文环境。这被称为闭包。理解内部函数能访问外部函数的实际变量而无须复制是很重要的。

  • 相关阅读:
    C#可视化程序设计第三章(3,4)
    "Can’t be opened because Apple cannot check it for malicious software" 解决方案
    Mac系统.DS_Store文件导致IOError: [Errno 20] Not a directory:解决方案
    读书笔记 《局外人》
    Chrome 67之后无法离线安装插件
    函数和方法的区别
    github|webstorm
    webstorm
    Markdown
    github
  • 原文地址:https://www.cnblogs.com/zhuifeng/p/3764608.html
Copyright © 2011-2022 走看看