博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript - 匿名函数和闭包
阅读量:4550 次
发布时间:2019-06-08

本文共 1196 字,大约阅读时间需要 3 分钟。

1. 块级作用域

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

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

转载于:https://www.cnblogs.com/xingyazhao/p/7545726.html

你可能感兴趣的文章
基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践
查看>>
null与undefind的区别(转)
查看>>
Web前端的状态管理(State Management)
查看>>
EF|CodeFirst数据并发管理
查看>>
[Java] Spring boot2 整合 Thymeleaf 后 去除模板缓存
查看>>
java并发:阻塞队列
查看>>
[NOI2001] 炮兵阵地 (状压Dp经典例题)
查看>>
Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法
查看>>
sublime Text2下安装php code sniffer插件
查看>>
在Emacs中使用plantuml画UML图
查看>>
[启动]Linux启动流程rcN.d rcS.d rc.local等
查看>>
Resouse of Buddhism
查看>>
Android实用代码七段(三)
查看>>
打造一个壁纸爬虫来爬你的老婆
查看>>
mysql 给用户设置权限
查看>>
K-Means算法总结
查看>>
TrunCateTable 和Delete Table 的区别
查看>>
Mybatis <where>标签
查看>>
updatefile.sh - Linux下代码更新脚本
查看>>
内存泄露
查看>>