博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js:深闭包(范围:上)
阅读量:6375 次
发布时间:2019-06-23

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

/**

 * 范围封锁
 */
fn1(); //fn1 您可以运行,没有报错,对于由function func_name()这样的写法来定义的函数,永远都会被最先初始化。
function fn1(){
  console.log("fn1");
}

fn2(); //报错:fn2 is not a function

/**
 *使用例如以下方式定义函数,不会被先运行,假设在定义之前调用。报错。
 *这样的函数的定义方式是先在内存中创建一块区域,之后通过一个fn2的变量指向这块区域。
 *这块区域的函数開始时是没有名称的。这样的函数名称叫做匿名函数。

 */
var fn2 = function(){
  console.log("fn2"); 
}
----------------------------------函数作用域--------------------------------------
/**
 * 在js中当进行函数调用时,会为每个函数添加一个属性scope,通过这个属性来指向一块内存。
 * 这块内存中包括有全部的上下文使用的变量,当在某个函数中调用了新函数之后。新函数依旧会有
 * 一个作用域来指向原有的函数的scope和自己新添加的scope,这样就形成了一个链式结构,
 * 这就是js中的作用域链。
 */
var color = "red";

var showColor = function(){

  console.log(this.color); 
}

function changeColor(){

  var anotherColor = "blue";
  function swapColor(){
    var tempColor = anotherColor;
    anotherColor = color;
    color = tempColor;
  }   
  swapColor();
}

changeColor();

showColor(); //blue
运行步骤:
释放swapColor

释放changeColor            

运行showColor

--------------------------------------------------------------------------

var name = "one";

var object = {
  name:"two",
  getName:function(){
     //var name = "three";
    return function(){
      return this.name;
      //return name;
    };
  }
};

console.log(object.getName()()); //one

想想问什么?若是在getName函数里再加个 var name = "three" 呢?若把匿名函数里的 return this.name; 改为 return name; 呢?

返回值是什么,为什么?

假设你能理解上面代码的执行结果,应该就算理解闭包的执行机制了。

/**
 * 使用闭包尽管能够演唱作用域,可是也会占用过多的内存,一般非特殊情况下不要使用闭包。
 *
 */

 

原创文章如转载。请注明出处,本文首发于csdn站点:

 

你可能感兴趣的文章
epoll源码分析
查看>>
朱晔和你聊Spring系列S1E4:灵活但不算好用的Spring MVC
查看>>
Java使用Try with resources自动关闭资源
查看>>
china-pub十一周年庆,多重优惠隆重登场,千万别错过哟!
查看>>
HDU 3068 最长回文(manacher算法)
查看>>
二叉树
查看>>
Node脚手架编写初学者教程
查看>>
08_Node js 工具模块 util
查看>>
手把手教你如何安装水晶易表——靠谱的安装教程
查看>>
Python单例模式(Singleton)的N种实现
查看>>
requirejs的插件介绍与制作
查看>>
SpringBoot整合Angular应用第二弹-配置支持Angular
查看>>
Facebook、纽约大学利用机器学习5分钟搞定核磁共振检查
查看>>
221. Maximal Square
查看>>
MySQL基础
查看>>
机器学习A-Z~支持向量机
查看>>
PAT A1010 二分进制结合重点题
查看>>
LeetCode35.搜索插入位置 JavaScript
查看>>
5个让人赞不绝口的微信小程序,拒绝占用手机内存!
查看>>
Spring Security整合KeyCloak保护Rest API
查看>>