注意:
该文章由JS小白(本人)编写完成,仅为个人总结和理解,若有纰漏和误解,还望多多指出,共同成长😋
JS作用域
首先,作用域就是声明的变量或者函数能够起作用(能被访问到)的范围,其又分为全局作用域和局部作用域。
全局作用域:
1.最外层函数或者最外层函数外通过var来声明的变量具有全局作用域
<script>
var a = 10; // 全局变量
function foo(){ // 全局函数
var b = 20; // 此时的b处于函数体内部,仅在foo函数内部有效
function bar(){
}
}
console.log(a); // 10
console.log(b); // b is not defined
</script>
2.在函数内部不通过var来定义的变量,又称为伪全局变量
function foo(){
a = 10; // 在函数内部未通过var声明的变量a现在也是全局变量
}
foo();
console.log(a); // 在这里打印a能获得10
3.window对象的属性和方法也是全局的(当环境中未定义,而直接可以使用的一些变量或者函数)
console.log(window);
function foo(){
console.log("foo");
console.log(name)
}
局部作用域
1.在函数内部通过var来声明的变量或者通过function声明的函数(在ES5中,函数是区分全局和局部唯一的代码块)
function foo(){
var a = 10; // 局部变量
function bar(){ // 局部函数
console.log("aaa");
console.log(a);
}
console.log(a);
bar();
}
foo(); // 10 aaa 10
console.log(a); // a is not defined
console.log(bar); // bar is not defined
特殊情况,if和switch,以及for和while循环,和函数不同,它们不会创建新的作用域。在块级声明中定义的变量从属于该块所在的作用域。
if(true){
var a = 10;
}
console.log(a); // 10
if(false){
var a = 10;
}
console.log(a); // undefined
2.函数的形参
function foo(a){
console.log(a);
}
foo(); // undefined
console.log(a); // a is not defined
以上是关于JS第七小节的总结,下次再见😘