javascript里面的闭包,作用域,预解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript里面的闭包,作用域,预解析相关的知识,希望对你有一定的参考价值。
函数的作用域
1.全局变量=公用卫生间
2.局部变量=次卧卫生间
局部变量 全局无法使用
局部声明变量不加var的话就变成全局变量(不推荐使用)
3.闭包=次卧的可以用自己的卫生间,也可以用公用卫生间;
预解析
1、先把变量声明 全部提前,赋值不动
2、函数也有预解析,直接提前
3、预解析 不会脱离函数作用域,也不会冲出script标签 最多提到自己标签的顶部
代码执行顺序 见一个srcipt解析执行一个,执行完了 在执行下一个
案例1:
alert(a);
var a=12;
解答:预解析直接把var a提前,但是赋值不动
弹出一个没有赋值的变量,是undefined
案例2:
function show(){
alert(a);
var a = 12; //预解析不回冲出 函数作用域
}
show();
alert(a);//报错
解答:第一个show();调用了函数里面弹出undefined;
第二个alert(a);局部变量,全局无法使用,所以报错not defined
案例3:
show();
function show(){
alert(1);
}
解答:函数也有预解析,直接提前,所以调用的时候可以弹出1
这也正印证了那句话:函数在哪里定义不重要,重要的是在哪里调用
案例4:
var a = 7;
if(a%2 == 1){
function show(){
alert(‘奇数‘);
}
}else{
function show(){
alert(‘偶数‘);
}
}
show();
解答:判断只是用来迷惑人的,判断走了第一条语句,但是函数是不会执行的
但是调用的函数show();只看下面的(从上到下的顺序,下面覆盖了上面的重名函数)所以alert(‘偶数‘);
案例5:
show();
var show = function(){
alert(1);
}
解答:var show 提前值不动,给一个变量加();答案是not a function
以上是关于javascript里面的闭包,作用域,预解析的主要内容,如果未能解决你的问题,请参考以下文章