JavaScript-作用域与作用域链

Posted 天凉好个秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript-作用域与作用域链相关的知识,希望对你有一定的参考价值。

一、JavaScript作用域:

   1.就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要是减少命名冲突。

    2.js的作用域(es6)之前,分为全局作用域、局部作用域 

    全局作用域:整个script标签,或者是一个单独的js文件 。

 var num=全局作用域;

    局部作用域:在函数内部就是局部作用域,这个代码的名字再在函数内部起效果和作用

function fn(){
 //局部作用域
var num=10;
}

 

 

二、变量作用域:

      1.根据作用域的不同,变量可以分为全局变量和局部变量

      全局变量:1.1在全局作用域下的变量

                           注意:在函数内部,没有声明var直接赋值的也是全局变量

var num=1
console.log(num);
function fn(){
console.log(num);
}
fn();

     局部变量:1.2在局部作用域下的变量,在函数内部的变量是局部变量

                      注意:函数的形参也可以看做是局部变量

function fn(){
 var num=10;//num就是局部变量,只能在函数内使用
 num1=20;//在函数内部没有var声明,直接赋值的变量属于全局变量
 console.log(num);
}
fn();

 2.从执行效率来看全局变量和局部变量

   2.1 全局变量只有在浏览器关闭时才会销毁,比较占内存资源

   2.2 局部变量当程序执行完毕就会销毁,比较节约内存资源

注:js中没有块级作用域,js作用域:全局作用域,局部作用域。现阶段没有,但js在es6新增了块级作用域

       块级作用域{ } if{ } for{ }

 

三、作用域链:

     内部函数访问外部函数的变量,采取的是链式查找的方式来取那个值,就近原则查找,这种结构称为作用域链。

 var num=10function fn(){//外部函数
  var num=20;
  function fn1(){//内部函数
  console.log(num);//输出的时20
  }
}

 

 

以上是关于JavaScript-作用域与作用域链的主要内容,如果未能解决你的问题,请参考以下文章

作用域与作用域链

JavaScript的作用域与作用域链

javscript闭包的准备工作 -- 作用域与作用域链

JavaScript作用域与作用域链

死磕前端javascript知识点详细讲解 • 第2篇《作用域与作用域链》

js的作用域与作用域链