作用域
作用域就是定义变量的区域,即代码执行时,访问变量的权限。
作用域分词法作用域和动态作用域。
JavaScript采用的是词法作用域,即静态作用域。
词法作用域:在函数定义时,作用域已经确定了。
动态作用域:在函数调用时,作用域才确定。
例:
let p = 1
function a() {
console.log(p)
}
function b() {
let p = 2
a()
}
b() // 1
注解:因为js采用的是词法作用域,执行 a 函数,先从a 函数内部查找是否有局部变量 p,如果没有,就根据书写的位置,查找上面一层的代码,也就是 p 等于 1,故打印1。
假设:假设js采用的是动态作用域,执行 a 函数,先从a 函数内部查找是否有局部变量 p,如果没有,就从调用 a 函数的作用域,也就是 b 函数内部查找 p 变量,就会打印2。
问:js采用词法作用域,什么语言会采用动态作用域?
bash
例:
let p = 1
function a () {
let p = 2
function b () {
console.log(p)
}
b()
}
a() // ??
以上是学习笔记总结。