javascript作用域:
就是代码名(变量)在某个范围内起作用和效果
目的:为了提高程序的可靠性,更重要的是减少命名冲突
作用域(es6之前,之后学到会更新):
全局作用域
整个javascript标签,或者单独的一个js文件
例:
var num1 = 10;
局部作用域(函数作用域)
在函数内部的就是局部作用域,这个代码只在函数内部起效果
例:
function num1() {
//局部作用域
}
变量作用域
根据作用域的不同,变量也分为全局变量和局部变量
全局变量
在全局作用域下的变量 在全局下都可以使用
例:
var num1 = 10;//num1就是全局变量
function num2() {
console.log(num1);
}
num2();
局部变量
在函数内部的变量就叫局部变量
funciton num1() {
var num2 = 10;
console.log(num2);
}
num1();//正常输出10
consolelog(num2);//错误,无法访问局部变量,外部无法访问局部变量
特殊情况
如何在函数内部没有声明,直接赋值的变量也是全局变量,外部可以访问
函数的形参可以看成是局部变量
funciton num1() {
num2 = 20 ;
}
num1();
consolelog(num2);
执行效率
全局变量在浏览器关闭时才会销毁,比较占内存
局部变量在使用后就会销毁,节省内存
作用域链
1.只要是代码都有作用域
2.写在函数内部的局部作用域
3.如果函数中还有函数,那就会在这个作用域中又诞生一个作用域
4.内部函数可以访问外部函数的变量,采取的是就近原则
var num = 10;
function num1() { //外部函数
var num = 20;
function num2() { //内部函数
console.log(num); // 解析: 我们直接看num1()调用时进入到函数内部,看到一个声明变量num = 20;在往下读取看到num2()调用,然后我们再进入到num2的函数内部看到了一个打印,根据内部函数可以访问外部函数的变量,所以最后num1()打印了一个20
//以这个代码继续说,如果外部函数没有声明num这个变量,那么内部函数就会继续往上找,最后输出全局变量num = 10; 这就是作用域链 就近原则
}
num2();
}
num1();