代码改变世界

JS作用域

2018-12-28 15:54  系佛  阅读(127)  评论(0)    收藏  举报

一,JavaScript的函数作用域

1.在JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。

var a = 2;
function fun(){
    var a = 1 ;
    return a ;
}
fun()
console.log(a)//输出多少呢

输出为2。

2.在函数内部申明变量,如果没有加var则会自动变为全局变量。

var a = 1;
function Fun(){
   a = 2 ;
}
Fun();
console.log(a)

输出为2。

二,JavaScript的作用域链

在JavaScript中的每个函数作为一个作用域,但如果出现函数嵌套函数,则就会出现作用域链。

var a = 1
function fn1(){
  function fn2(){
    console.log(a)
  }
  function fn3(){
    var a = 4
    fn2()
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() //输出多少

函数在执行的过程中,先从自己内部找变量

如果找不到,再从创建当前函数所在的作用域去找, 以此往上

三、申明提前

1,在JavaScript中如果不创建变量,直接去使用,则报错

console.log(a)

直接输出会报错。

2,JavaScript中如果创建值而不赋值,则该值为 undefined

var a;
console.log(a)

 输出为undefined.

3.如果一个变量的使用在申明之前,则会自动将申明提前

console.log(a)
var a = 1;

输出为undefined,因为上述代码等同于:

var a ;
console.log(a);
a = 1;