变量的作用域
有两种:全局变量和局部变量
全局变量:在函数外定义的变量,有全局作用域,即在函数内都可以访问
// 全局变量
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找,
// 找不到再向上一级全局作用域找,这时候找到了,这个向上一级查找的链路叫作用域链
}
}
函数在执行的时候会创建一个临时执行环境,会把函数内的变量放到执行环境里面,然后依次执行