js作用域和预解析

js作用域和预解析

js作用域

要想了解什么是js的作用域,那么就要知道,这个作用域是对什么而言的。其实,在js中,我觉得所谓作用域就是指变量和函数能在哪些地方访问,哪些地方访问不到,即是全局的还是局部的。

(1)变量

  • 全局变量
    全局变量有两种情况:

    1)是指在函数外部定义的变量
    
    2)是指在函数内部,没有用var声明的变量
    
  • 局部变量

    在函数内部使用var声明的变量
    

(2)函数

* 匿名函数:使用function关键字定义,没有函数名的函数
* 函数表达式:使用关键字声明,后边没有函数名,赋值给一个变量的函数
* 声明函数:使用function关键字定义,后边加函数名的函数

举个小例子,方便大家理解,嘿嘿:

(function(){
    var i = 10;
    j= 10;
    console.log('嗨,我是匿名函数');//嗨,我是匿名函数
})();

function abc(){console.log('嗨,我是声明函数')}
abc();//嗨,我是声明函数

var j = function(){
    console.log('嗨,我是函数表达式');
    }
j();//嗨,我是函数表达式

在第一个小例子中,我定义的i就属于局部变量,只能在这个函数内部被访问,在其他的地方是访问不到它的,它是局部变量;,但是j是全局变量,它可以在任何的地方访问,他的作用域是全局的。

全局作用域:
就是指全局变量或者函数在任何的地方都可以被访问
局部作用域:
就是指在某些变量或者函数只能在某个函数内部使用

js预解析

预解析其实就是指js在执行之前,浏览器为js做的某些准备工作,在这里,我只介绍它其中的两种准备工作:

1、将js中所有的变量的声明都提到顶部

2、给函数和变量赋值

光听我说,是不是还是感觉不太懂,下边我就举例说说到底是怎样的两种工作

var i = 11;
var c = function(){
    console.log('helloworld');
}

那么它的准备工作是

var i,c;//第一步,将所有的声明都提到顶端
i = 10;//第二步:给函数,变量赋值
c = function(){};

再给大家看一个例子,加深一下印象

Share
Comments