js作用域和预解析
js作用域
要想了解什么是js的作用域,那么就要知道,这个作用域是对什么而言的。其实,在js中,我觉得所谓作用域就是指变量和函数能在哪些地方访问,哪些地方访问不到,即是全局的还是局部的。
(1)变量
(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(){};
再给大家看一个例子,加深一下印象