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

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

函数体内部的变量都可以保存在函数作用域内。 -----闭包(函数变量可以被隐藏于作用域链之内,因此看起来是函数将变量“包裹”了起来)

当一个函数嵌套另外一个函数,外部函数将嵌套的对象作为返回值返回。往往就时闭包了。理解闭包首先了解嵌套函数的词法作用域规则。

var scope = 'global scope'; function checkscope(){     var scope = 'local scope';     function f(){
return scope}; return f; } checkscope()()//"local scope"

特性:可以捕捉到局部变量(和参数),并一直保存下来,看起来像这些变量绑定到了在其中定义它们的外部函数。

var unique = (function(){     var conter = 0;     return function(){
return conter++} }()); unique()

利用闭包实现私有属性存取器方法(私有状态共享的通用做法):

function addPrivateProperty(o,name,predicate){     var value;     o[`get${name}`] = function(){
return value;}; o[`set${name}`] = function(v){ if(predicate && !predicate(v)) throw Error(`set ${name}:invalid value ${v}`) else value = v; } } var o = {}; addPrivateProperty(o,'Name',function(x){
return typeof x == "string"}); o.setName("Frank"); console.log(o.getName());

在同一个作用域链中定义两个闭包,这个两个闭包共享同样的私有变量或者变量,这是一种非常重要的技术。

重要点:闭包内无法直接访问外部函数的参数数组,除非外部函数将参数数组保存在另外一个变量中:

var outerArguments = arguments;

var that = this;

转载于:https://www.cnblogs.com/tangjiao/p/8984474.html

你可能感兴趣的文章
Windows Phone 7中使用PhoneApplicationService类保存应用程序状态
查看>>
MySql数据库的下载和安装卸载
查看>>
JDBC接口核心的API
查看>>
双缓冲技术局部更新原理之派生自View
查看>>
PPAPI插件与浏览器的通信
查看>>
用 query 方法 获得xml 节点的值
查看>>
Hello,Android
查看>>
Sublime Text 3 build 3103 注册码
查看>>
删与改
查看>>
SAP 中如何寻找增强
查看>>
spi驱动无法建立spidev问题
查看>>
ANDROID开发之SQLite详解
查看>>
如何依靠代码提高网络性能
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>
MySQL事务的开启与提交,autocommit自动提交功能
查看>>
PriorityQueue
查看>>
CODEVS1403 新三国争霸
查看>>