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

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

 

一、变量作用域

   要理解闭包,就要理解javascript 变量作用域。

  变量作用域:全局作用域和局部作用域两种。

上面: 函数内部可以读取全局变量a。//33

<script type="text/javascript">

function myfun(){
var a=1; //定义了局部变量
console.log('我是局部变量a的值'+a);
}
myfun();
console.log('我是全局变量的a,但我不认识'+a);
</script>

结果为:

另外当函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!

结果为:

总结:

● 定义在function里面的变量,叫做局部变量,只在function里面有定义声明,出了function没有定义的。

● 定义在全局范围内的,没写在任何function里面的,叫做全局变量,都认识。

原理:全局变量在定义时,不需要任何特殊结构,就会直接生成一个新的变量,在任何位置查找变量都有定义。局部变量定义在函数内部,函数如果不执行,相当于内部的代码没写,局部变量等于从未定义过,在函数执行时,会在函数作用域内部立即定义了一个变量,使用完之后,变量立即被销毁。所以在外部永远找不到局部变量定义。

二、函数的参数,会默认定义这个函数的局部变量

在函数内部使用的自己的变量,尽量定义为局部变量。

结果为:

三、全局变量的作用

 

全局变量有自己独特的用途:累加、传递。

 

累加:函数每执行一次,都要求变量在原来基础上发生变化。

全局变量挺有用的,有两个功能:

功能1:通信,共同操作传递同一个变量

 

 

功能2:累加,重复调用函数的时候,不会重置

 

 

如果num定义在函数里,每次执行函数就会把num重置为0

 

 

 

function 大{    function 小{    }    小();   //可以运行}();   //不能运行,因为小函数定义在了大函数里面,离开大函数没有作用域。

 

如何从外部读取局部变量?

 

闭包:当在函数内部定义了其他函数时,就创建了闭包。

闭包函数是什么,就是:函数内包含子函数,并且最终return子函数。

 

而闭包函数的最大价值在于:可以在函数外部(子函数),直接读取该函数的局部变量。

 

 

闭包2:匿名函数闭包

 

使用闭包的注意点

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的

 

转载于:https://www.cnblogs.com/smivico/p/7732237.html

你可能感兴趣的文章
C#中抽象类和接口的区别(二)
查看>>
一、线性结构
查看>>
[SPOJ2021] Moving Pebbles
查看>>
Log4Net不同日志类型写入到不同文件
查看>>
VR AR MR的未来
查看>>
Python 编辑器内容
查看>>
软件设计不同时期的关注点分离(2010-04-26)
查看>>
Entity Framework 基于方法的查询语法
查看>>
Ruby 事务Blocks
查看>>
JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图
查看>>
手机SIM卡编号的含义
查看>>
安装pygame
查看>>
直接拿来用!最火的Android开源项目(三部完整版)
查看>>
http://demo.doyoe.com/css3/text-fill-color/
查看>>
申卫军(博士生导师)
查看>>
手机钉钉不支持js的append
查看>>
Linux内核调用I2C驱动_驱动嵌套驱动方法
查看>>
LeetCode 179. Largest Number
查看>>
android应用签名详解
查看>>
JSONObject
查看>>