JavaScript的变量作用域和闭包操作
来源:互联网 发布:80年代网络歌曲 编辑:程序博客网 时间:2024/05/20 08:02
初次写稿,有什么技术问题,可以直接call我!
变量的作用域
每个函数 来定义作用域,函数内部用var来声明,那么这个变量只能允许在本函数内使用,那么此时就像是骑车的班头米玻璃一样,在函数里面可以看到外面的变量,但是在函数外面却不能看到函数里面的变量;作用域之间的相互嵌套,将形成作用域链,函数的嵌套将形成闭包;
作用域
JavaScript中有两种作用域:局部作用域和全局作用域;
<script>
var func = function(){
var a = "nihao";
console.log(a);
}
var funcab = function(){
var b = "shijie";
console.log(b);
}
func();
funcab();
</script>
这一段程序现在运行是没有问题的,但是如果在funcab中让函数输出变量a,程序就会报错
作用域链
在JAvaScript中访问一个变量时,将本地变量和参数开始,逐级向上遍历作用域直到全局作用域。
var scope = 0, zero = "global-scope";
(function(){
var scope = 1, one = "scope-1";
(function(){
var scope = 2, two = "scope-2";
(function(){
var scope = 3, three = "scope-3";
// scope-3 scope-2 scope-1 global-scope
console.log([three, two, one, zero].join(" "));
console.log(scope); // 3
})();
console.log(typeof three); // undefined
console.log(scope); // 2
})();
console.log(typeof two); // undefined
console.log(scope); // 1
})();
console.log(typeof one); // undefined
console.log(scope); // 0
这样的例子就相当于:你没钱花了可以找你爸爸要,然后爸爸没有,你就可以去找你爷爷,依次向上找;但是如果你爸爸没有钱,
他是不会像你要钱的;
闭包
只要存在调用内部函数的可能,JavaScript就需要保留被引用的函数,而且JavaScript运行时需要跟踪引用这个内部函数的所有变量,知道最后一个变量废弃,JavaScript的垃圾收集器才能释放相应的内存空间
闭包最大的用处有两个:函数外部的变量可以读取函数内部的变量;让这些变量的值始终保持在内存中;
function fcu(){
var n = 111;
Add = function(){
n+=1;
}
function ffs(){
alert(n);
}
return ffs;
}
var result = fcu();
result(); ///111
Add();
result(); ///112
使用闭包的注意点:由于闭包会使得函数中的变量被保存在内存中,内存消耗很大;所以不能滥用闭包,否则会造成网页的性能问题;闭包会在父函数外部改变父函数内部变量的值,不要随便改变父函数内部变量的值;
- JavaScript的变量作用域和闭包操作
- JavaScript的变量作用域和闭包操作
- JavaScript 变量作用域和闭包
- javascript中的【变量作用域】和【作用域链】以及【闭包】的理解
- JavaScript:Scope &Closure 变量作用域和闭包
- JavaScript闭包-块级作用域和私有变量
- JavaScript 的变量作用域及闭包
- JavaScript的变量作用域及闭包总结
- JavaScript 变量作用域及闭包
- JavaScript闭包作用域变量问题
- JavaScript 变量作用域、this、闭包
- JavaScript 变量作用域、this、闭包
- javascript的基础学习——Javascript组成、变量类型(类型转换)、isNaN()、作用域和闭包
- 关于闭包和变量的作用域的问题
- JavaScript的作用域和变量对象
- javaScript的作用域和变量提升
- javascript的变量提升和作用域
- JavaScript的变量和作用域
- telnet或SQLplus下命令输入错误如何删掉重新输入
- bash: bee: command not found
- 摄像机跟随主角
- Android性能优化
- 在轮播图上放置黑色阴影背景
- JavaScript的变量作用域和闭包操作
- jedispool 连 redis 高并发卡死
- 13个实用的Apache Rewrite重写规则
- 面向切面编程
- WKWebView返回向上移(64点)
- Python Shell 与 window cmd运行py文件方法
- 获取python脚本文件所在路径
- 谷歌新出的耳机不只是耳机,或成为AirPods最大的敌人
- 直接插入排序