js原理:独特的js变量

28 浏览发布于 作者 zouyang (欢迎转载-请注明出处链接)留下评论分享按钮

本文从我的笔记汇总变量的一些比较特别的特性说明如下

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、其它变量的基础知识不是本文重点:基本类型的赋值,引用类型的赋值,没有定义的变量会怎样,这些略。

(完)

想要打赏,请点击这里

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注