美文网首页
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