专栏首页全栈开发之路JS执行上下文/作用域/闭包

JS执行上下文/作用域/闭包

一、执行上下文

  • 单线程
  • 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待
  • 全局上下文只有唯一的一个,它在浏览器关闭时出栈
  • 函数的执行上下文的个数没有限制
  • 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。 例:
var color = 'blue';
 
function changeColor() {
    var anotherColor = 'red';
 
    function swapColors() {
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
    }
 
    swapColors();
}
 
changeColor();

二、作用域

1、变量作用域

  • 全局变量:在全局声明的变量,任何地方都可以访问
  • 局部变量:在函数里声明的变量,只有函数里内访问

——几个注意点:

1)声明局部变量必须用var,不然会污染全局变量

scope = "gobale";
function checkscope() {
      scope = "local";
}
 checkscope();
console.log(scope); //"local"

2)一般来说内部能访问外部,外部不能访问内部。 那么怎么让外部也能访问内部? —— return

2、函数作用域

js没有块级作用域,而有函数作用域。 函数作用域是指:在函数内声明的所有变量在函数体内是始终可见的。


三、闭包

什么是闭包

参考:学习Javascript闭包(Closure)——阮一峰

  • 有权访问另一个函数作用域中的变量的函数
  • 定义在一个函数内部的函数
  function f1(){
    var n=999;
    function f2(){
      alert(n); 
    }
    return f2;
  }
  var result=f1();
  result(); // 999

f2()就是闭包

闭包的作用


四、this

  • 全局函数里,this 等于window
  • 函数被作为某个对象的方法调用时,this等于那个对象
  • 匿名函数执行环境具有全局性,this指向window (可以通过call()或apply()改变函数执行环境)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JSP学习

    参考知乎:https://www.zhihu.com/question/37962386/answer/87758781

    杨肆月
  • (自制翻译)如何解决在vue中this报错undefined

    当你开心地在编程,惊叹于vue的神奇,这时你却遇到这样的情况: 你的vue应用无法正常工作,你收到的报错是:this is undefined

    杨肆月
  • 一个xss漏洞问题分析

    http://zhibo.sogou.com/gameZone_格斗游戏.whtml/gameZone_格斗游戏.whtml?product=live&page...

    杨肆月
  • 献给前端求职路上的你们(下)

    真正面试中,面试官往往采用的是由难到易的套路,那js和jQuery就是重中之重了,以及针对项目和所用技术方面的一些问题也就是你的必备储粮啦! JavaScrip...

    用户1667431
  • 理解运用JS的闭包、高阶函数、柯里化

    JS的闭包,是一个谈论得比较多的话题了,不过细细想来,有些人还是理不清闭包的概念定义以及相关的特性。

    书童小二
  • JavaScript闭包

    函数和对其词法环境lexical environment的引用捆绑在一起构成闭包,也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函...

    WindrunnerMax
  • JavaScript闭包原理与用法实例

    (1)变量的作用域 不带有关键字var的变量会成为全局变量; 在函数中使用关键字var声明的变量是局部变量。 局部变量只有在函数内部才能访问到,在函数外面是访问...

    Javanx
  • 实用 | 读源码,学JavaScript

    Javascript于1995年由网景公司的Brendan Eich发明。 最初发明的目的是作为一个简单的网站脚本语言,来作为复杂网站应用java的补充。但由于...

    疯狂的技术宅
  • 详解作用域链

    在本文中,我们将着重讨论作用域链。首先我们会了解作用域、块级作用域、相关的一些重要概念等前置基础知识,接着我们会通过几个例子来对作用域链进行详细讲解,最后我们还...

    石璞东
  • 【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)

    ? 周杰伦 深深地 影响了我们 一代人 这句话 不足为过 前言 今日推文将介绍如何使用TensorFlow一步步来搭建一个序列建模的应用——机器创作歌词,训练...

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券