美文网首页
JS执行上下文/作用域/闭包

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

作者: 杨肆月 | 来源:发表于2019-08-20 09:09 被阅读0次

    一、执行上下文

    • 单线程
    • 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待
    • 全局上下文只有唯一的一个,它在浏览器关闭时出栈
    • 函数的执行上下文的个数没有限制
    • 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。
      例:
    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()改变函数执行环境)

    相关文章

      网友评论

          本文标题:JS执行上下文/作用域/闭包

          本文链接:https://www.haomeiwen.com/subject/laghsctx.html