本文从我的笔记汇总变量的一些比较特别的特性说明如下
1、变量申明的提升
我有一篇文章讲了这个:Link
2、声明变量 var a = 10; 那么不要var,其实也能声明一个变量,并不会报错 。a=10; 这个变量会是全局的,不论这个a是否在一个函数内声明,还是在哪声明。
总结就是,在任何地方隐式定义的变量都会定义在全局作用域中,即不通过 var 声明直接赋值的变量。不建议这种书写方式。
//当用a=10,写在函数内部时,这个a会被js定义为全局变量:
function aaa(){
a=10;
var b=20;
}
aaa();
alert(a);//返回10,是可以alert到函数内部的a的
alert(b);//报错undefined
//示例2
var a,b;
var c,d;
function box(){var a=b=3;} //相当于var a=b b=3; b是全局的,a是局部的
box();
c=d=4; //相当于var c=d d=4; c、d在window作用域下,都是全局的
alert(a); //返回undefined
alert(b); //返回3
alert(c); //返回4
alert(d); //返回4
3、变量的查找:是去寻找最近的var声明的那个,找不到就再去外一层找,找不到就再去外一层……
//示例1:
var a = 10;
function aaa(){ alert(a);}
aaa(); //返回10
//示例2:
var a = 10;
function aaa(){
alert(a);
var a =20;
}
aaa(); //返回undefined
//上面这个例子 aaa函数 内部程序会有一个预解析,相当于变成了 var a;alert(a); a =20;
//示例3:
var a = 10;
function aaa(){
var a =20;
alert(a);
}
aaa(); //返回20
//示例4:
var a = 10;
function aaa(){
a =20;
alert(a);
}
aaa(); //返回20 注意顺序,它是先找到外层a=10,然后函数内部更改为了20
//示例5:
var a = 10;
function aaa(){
alert(a);
a =20;
}
aaa(); //返回10
4、当参数跟局部变量重名时,优先级是相等的。
var a = 10;
function aaa(a){
alert(a);
var a =20;
}
aaa(a); //返回10
5、变量的分组选择符
var a = (1,2,3)
alert(a); //返回的是3
这种分组写法,会赋给最后一个。
6、其它变量的基础知识不是本文重点:基本类型的赋值,引用类型的赋值,没有定义的变量会怎样,这些略。
(完)
想要打赏,请点击这里