时间:2021-07-01 10:21:17 帮助过:16人阅读
闭包
在函数A中声明了函数B,函数B中使用了函数A的作用域中的变量,且函数A返回(return)了函数B,那么函数B就对函数A的作用域形成了闭包,函数A调用完毕之后,只要返回的函数B存在,函数A的作用域也一直存在
- function makeFn(){
- var n1 = 100;
- function fn(){
- var n2 = 200;
- console.log(n1);
- }
- return fn;
- }
- var f2 = makeFn();
- f2();
闭包可以实现对象的私有属性,如:
- var obj = {
- name:"sunset",
- age:12,
- speak:function(){
- console.log("我是"+this.name);
- }
- }
- console.log(obj.name);
再来一个例子:
- function makeObj(){
- var name = "sunset";
- var age = 12;
- var obj = {
- speak:function(){
- console.log("我叫"+name);
- }
- }
- return obj;
- }
- console.log(obj.speak());
最后一个非常好的例子:(导入jQuery后执行看看)
- <script>
- for (var i = 0; i < 10; i++) {
- function makeFn(index) {
- function fn() {
- console.log(index)
- }
- return fn;
- }
- var btn = makeFn(i);
- $("<button></button>")
- .text(i + 1)
- .appendTo(document.body)
- .on("click",btn)
- }
- </script>
变量声明提前:
在js的作用域中,所有变量的声明都会被提前,但是赋值不会提前(变量提前就不演示了,学到这已经不用解释了)
- var a = 3;
- function f1(){
- console.log(a);
- var a = 10;
- }
- f1();
等同于
- function f1(){
- var a;
- console.log(a);
- a = 10;
- }
- f1();
相关推荐:
PHP 闭包获取外部变量和global关键字声明变量的区别讲解_php实例
JS声明变量详解
JavaScript闭包-闭包中的变量和this对象
以上就是js中闭包的解释以及变量声明提前的例子(代码)的详细内容,更多请关注Gxl网其它相关文章!