JavaScript的变量作用域和闭包操作
2017-10-20 09:23
316 查看
初次写稿,有什么技术问题,可以直接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
使用闭包的注意点:由于闭包会使得函数中的变量被保存在内存中,内存消耗很大;所以不能滥用闭包,否则会造成网页的性能问题;闭包会在父函数外部改变父函数内部变量的值,不要随便改变父函数内部变量的值;
变量的作用域
每个函数 来定义作用域,函数内部用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理解之变量作用域与闭包
- JavaScript 变量作用域和闭包
- JavaScript 变量作用域及闭包
- JavaScript闭包-块级作用域和私有变量
- JavaScript 的变量作用域及闭包
- javaScript中的变量作用域的闭包处理
- JavaScript的变量及函数(变量提升、嵌套作用域、条件语句、严格模式、IIFE、闭包、模块化、this、原型)
- JavaScript 变量作用域、this、闭包
- JavaScript 变量作用域及闭包第1/2页
- 知乎上解决for click 方法,闭包,同步异步操作,变量作用域
- javascript理解之变量作用域与闭包
- JavaScript 变量作用域、this、闭包
- JavaScript:Scope &Closure 变量作用域和闭包
- 深入理解JavaScript作用域、变量对象、闭包
- Javascript作用域和变量提升