js的预解析
在我们开始玩js之前,我们首先要知道js是怎么解析我们的代码的。
1.首先呢,在执行前,浏览器会把我们的变量和函数预解析(什么叫预解析呢,也就是把变量和函数的声明提升到当前作用域的最顶端),即
var i =0;
(在js中,var是用来声明变量的)
js在解析上边的代码是的顺序是这样的:
var i;
i = 0;
恐怕大家还会有疑惑对吧,再看下边:
var a = 1;
var b = 2;
var c = a + b ;
js解析以上代码的顺序为
var a ;
var b ;
var c ;
a = 1 ;
b = 2 ;
c = a + b ;
2.预解析了之后呢,就该给函数赋值了,运行到相应变量和函数的代码的时候才会赋予其相对应的值,否则的话,只是把变量和函数声明提到作用域最顶端而已。
以上就是js的预解析,其实很好理解的对吧~
js的作用域
在上面我提到了作用域,有些朋友一定会疑惑什么是作用域,那么我就来讲讲作用域
js分为 全局作用域 和 局部作用域
全局作用域
说得直白一点,就是如果一个变量或者函数是的全局的,那么在任何地方都可以引用这个变量或者函数。
局部作用域
从字面上理解也就是有区域的,在一定的区域才可以使用的函数或者变量。也就是在函数内部声明的变量或者函数所作用的区域是有限制的,只能在其函数的内部才可以使用。
注意
if 和 for 语句中定义的是全局作用域
只有函数才可以定义局部作用域
局部作用域相对于全局作用于来说是不可见的
函数内部的变量对外是不可见的,函数的内部可以访问外部函数的变量
内部函数没有变量的时候,会自动去外部获取变量
js 函数的创建方式
函数表达式
直接赋予变量,就是使用function关键字,再赋值给一个变量的函数 如:
var haHa = function(){
console.log(这是函数表达式);
}
##声明函数
是使用function关键字 加上 函数名 声明的函数 如:
function fn(){
console.log(这是声明函数)
}
##匿名函数
就是使用function函数,但是没有函数名
function(){
console.log(这是匿名函数)
}
注意
上边只是写出各种函数的形式,但是上边的函数并不能执行; 那么,怎么让函数执行呢???现在就来告诉大家
函数表达式可以使用( );来立即执行
但是函数声明不可以,那么函数声明怎样执行呢?
函数声明可以使用( )( );其中第一个括号表示把匿名函数封装成函数表达式,第二个括号表示执行,也可以传参,传参的话也就是在第二个括号里填上你要传的参数。
所以上边的函数声明想要执行的话,就可以这样
(function(){
console.log(这个函数可以执行了)
})();