JavaScript 学习下作用域

98 阅读2分钟

变量的作用域

有两种:全局变量局部变量
全局变量:在函数外定义的变量,有全局作用域,即在函数内都可以访问

// 全局变量
var a = 'a'
function myFun () {
  console.log(a) // 可以访问
}

局部变量:在函数内定义的变量,有局部作用域,即在定义变量的函数内可以访问

// 局部变量
function myFun () {
  var b = 'b'
  console.log(b) // 只能在定义的函数内访问
}

注意:在函数内定义变量一定要加上 var, 否则会定义成全局变量

函数内定义了变量会提前声明

var scope = "global";
function fn(){
 console.log(scope); 
 // result:undefined,为什么不是global,而是undefined呢,
 // 因为如果函数内有声明变量,会提前声明,类似于var scope;
 var scope = "local";
 console.log(scope);//result:local;
}
fn()

// 版权声明:本文为CSDN博主「ruanhongbiao」的原创文章,遵循 CC 4.0 BY-SA 
// 版权协议,转载请附上原文出处链接及本声明。
// 原文链接:https://blog.csdn.net/qappleh/java/article/details/80311443

javascript没有块级作用域

也就是说在for,if等花括号里没有作用域,javascript的作用域是在函数内才有的

作用域链

内部作用域访问外部作用域内的变量,如果没找到再向上一级去查找,这种一级级向上查找的链,叫作用域链(个人理解)

举个🌰

var global = 'global'
function aa () {
  var local_aa = 'local aa'
  function bb () {
    var local_bb = 'local bb'
    console.log(global) 
    // 这时候会现在bb这个作用域里找,找不到向上一个作用域aa找,
    // 找不到再向上一级全局作用域找,这时候找到了,这个向上一级查找的链路叫作用域链
  }
}

函数在执行的时候会创建一个临时执行环境,会把函数内的变量放到执行环境里面,然后依次执行