码迷,mamicode.com
首页 > 编程语言 > 详细

javascript预解析详解

时间:2018-11-04 21:50:26      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:语句   赋值   外部   优先   参数   cti   没有   argument   输出   

1、定义

预解析:在当前作用域下,js运行之前,会把带有var和function关键字声明的变量先声明,并在内存中安排好。然后从上至下解析js语句。而且function的声明优先于var声明。

2、var声明

通过var声明的变量,进行预解析的时候:先声明变量,不管变量有没有赋值,声明时都赋值为undefined。

console.log(a); //undefined
var a = 1;
console.log(b); //undefined
var b = function(){}
1
2
3
4
5
注意:
(1)同名的var声明和同名的函数声明,不管二者书写先后顺序,函数声明会覆盖掉var声明的变量;
(2)同名的var声明,后者会被忽略;
(3)同名的函数声明,后者会覆盖前面的

console.log(a) //function a(){}
var a = 10;
console.log(a) //10
var a = 20;
console.log(a) //20
var a = function () {
// body...
}
console.log(a) //function(){}
function a(){}
console.log(a) //function(){}
/*若在此处加下面的声明*/
/*
function a(name){this.name = name}
*/
//则最上面的a输出:function a(name){this.name = name}

3、function声明

function进行预解析的时候,不仅是声明而且还定义了函数体,在内存中会开辟一块内存空间,存储的是函数体的字符串,不会执行。调用以后执行。

console.log(a) //function a(name){this.name = name}
function a(name){this.name = name}
1
2
注意:直接在函数后面加(),会报错。这样的函数声明时,先声明函数,然后声明(),这个()是匿名函数,声明会报错

function a(){}() //报错
1
注意问题

(1)预解析,不会超出script标签

<script>
console.log(a) // 报错
</script>
<script>function a(){}</script>
1
2
3
4
(2)后面script标签中可以访问呢前面script标签中的js,因为js是从上至下执行的

<script>
function a(){}
var a = 10
</script>
<script>
console.log(a) //10
</script>
1
2
3
4
5
6
7
(3)匿名函数可以带名字,但是不等同于定义了一个函数

console.log(a) //undefined
fn() //报错
var a = function fn (argument) {
// body...
}
1
2
3
4
5
(4)函数内部同名变量额声明高于传入的同名参数

var a = 10
function fn(a){
var a = 20
console.log(a)//20
}
fn(a)
1
2
3
4
5
6
var a = 10
function fn(a){
console.log(a)//undefined
}
fn() //因为调用时,没有穿参数
1
2
3
4
5
(5) 函数内参数的声明高于外部同名变量的声明

var a = 10
function fn (a){
console.log(a)//undefined
}
fn()
1
2
3
4
5

var a = 10
function fn (b){
console.log(a) // 10
}
fn()
//因为函数的形参是b,函数内的参数是a  不一样,所以还是  寻找全局变量a
或者

var a = 10
function fn (){
console.log(a) // 10
}
fn()
//因为函数没有传参数  寻找全局变量a

javascript预解析详解

标签:语句   赋值   外部   优先   参数   cti   没有   argument   输出   

原文地址:https://www.cnblogs.com/urlvue/p/9905992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!