作用域部分

100 阅读2分钟

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();