zoukankan      html  css  js  c++  java
  • JavaScript

    1. 块级作用域

    /*
    这里是全局环境
    */
    
    //立即执行函数
    (function () {
        //这里是块级作用域,外部无法读取function内部的变量,除非将变量赋给window
        var a = 'hello';
        var b = 'world';
        alert(a);             //可以打印a
        window.b = b;    //将b赋给全局
    })();
    
    alert(a);     //无法打印a
    alert(b);     //可以打印b

      我们一般在写插件的时候,将代码封装在一个立即执行函数里,一般只将一个对象赋给全局供外部使用,这样就避免了插件内部变量污染全局变量。

      在多人协作开发的项目中要尽可能少的使用全局变量和函数,否则很可能导致命名冲突。而将各自的代码封装在各自的作用域中,则互不干扰。

    //程序员A的代码
    (function () {
        $(function () {
            var a = 'hello';
            alert(a);
        });
    })();
    
    //程序员B的代码
    (function () {
        $(function () {
            var a = 'world';
            alert(a);
        });
    })();
    
    //都得以执行

       在全局作用域中使用块级作用域可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域链了。

    2. 对于闭包的自我理解

      在项目中遇到的代码情况:

        (function () {
            var data = '';
            var test = window.test = window.test || {};
            test.setData = function () {
                data = 'The data has been assigned.';
            };
            test.getData = function () {
                return data;
            };
        })();
    
        console.log(data);  // undefined
        test.setData();       // 在全局环境给data变量赋值
        console.log(test.getData());  // data的作用域在立即执行函数里,但这里可以取到setData所赋的值。

    到此我对于闭包的理解是这样的:在全局环境中取不到的块级作用域变量,可以通过块级作用域中的所传递给全局的函数或方法获取到。

  • 相关阅读:
    修改weblogic jvm启动参数
    weblogic部署步骤
    weblogic安装步骤
    sqldeveloper 导出数据库
    VO与PO 的理解
    【Hyper-V】与【VirtualBox】【VMware】冲突的解决方法
    xstream 实现simplebean2xml ,xml2simplebean
    eclipse中SVN报错解决
    点击eclipse包报错
    myeclipce项目导入eclipse中报错
  • 原文地址:https://www.cnblogs.com/xingyazhao/p/7545726.html
Copyright © 2011-2022 走看看