-
作用域简介
-
JavaScript 作用域:就是代码名字,在某个范围内起的作用和效果。目的是为了提高程序的可靠性,减少命名冲突;
-
作用域是可访问变量的集合。
-
在 JavaScript 中, 对象和函数同样也是变量。
-
在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。
-
JavaScript 函数作用域: 作用域在函数内修改。
-
变量的作用域:根据作用域的不同我们的变量可以分为全局变量和局部变量
-
局部作用域
-
function fn() {
-
var str = '我是一个局部作用域';
-
}
-
console.log(str); // 这时是访问不到的
-
-
// 局部变量:在局部作用域下的变量 或者在函数内部的变量就是局部变量
-
// 注意:函数的形参也可以看做是局部变量
-
-
function fun(aru) {
-
var num1 = 50; // num1就是局部变量 只能在函数内部使用
-
console.log(num1); // 在这里使用是正确的 但是在函数外面使用报错
-
num2 = 70;
-
console.log(num2); // num2在这里可以正常输出
-
-
-
console.log(aru);
-
// 首先在fun括号里面传入一个hello 然后在函数内部输出是正确的但是在函数外部输出是错误的
-
-
}
-
//fun();
-
fun('hello');
-
//console.log(num1);// 报错 num1是局部变量
-
console.log(num2); // 这里可以输出num2是因为num2是特殊的全局变量
-
-
全局作用域:
全局变量:在全局作用域下的变量称为全局变量,在全局下都可以使用
// 注意:如果在函数内部没有声明直接赋值的变量也属于全局变量
-
var num = 10; //num就是一个全局变量
-
console.log(num);
-
-
-
function fn() {
-
console.log('全局变量在函数内部也可以使用' + num);
-
-
}
-
fn();
-
-
作用域链
-
作用域链:内部函数访问外部函数的变量,采取的是链式查找的方式决定取哪个值 这种结构我们称为作用域链 就近原则
-
-
var num = 10;
-
function fn() { //外部函数
-
var num = 20;
-
function fun() { //内部函数
-
console.log(num);
-
}
-
fun();
-
}
-
fn();
-
-
作用域链总结:
-
内部函数访问外部函数的时候,采取的是链式查找的方式,一层一层往外查找
-
先是查找外一层,有没有,没有在往外接着查找,找到了我就输出相应的结果
-
没有的话继续往上找就可以了,所以这个方法,我们称为作用域链
-
简单总结就是就近原则,谁离我近我就执行谁