一、什么是变量
在js中,变量其实就是用来存储数据的。
1.变量的命名
1.变量命名必须以字母或是下标符号”_”或者”$”为开头,不能以数字开头,变量名中不允许使用空格。
2.不能用使用js语言中保留的关键字及保留符号作为变量名,变量的名称要有意义。
3.变量名长度不能超过 255 个字符。
4.汉语可以作为变量名。但是不建议使用!!!
5.变量的字母是区分大小写的。arr和ARR是不一样的的。
6.变量创建后不立即赋值,此时的值是undefined。
7.长命名一般以驼峰命名法命名。比如用户姓名:userName。
2.变量的书写
1.这是创建时赋值
<script>
var userName = “吮指鸡”;
</script>
2.先创建后赋值。
<script>
var userName;
userName = “吮指鸡”;
</script>
3.多个变量定义
<script>
var userName,passWord;
</script>
多个变量定义以逗号隔开
3.变量的声明提升
1.什么是变量的声明提升
JS的解析器在页面加载的时候,即预解析的时候,候会先把变量和函数提升,再给变量赋值,赋值还在原来的地方,但是定义变量提到当前作用域的最前面。但要是使用变量在定义变量之后没有影响,但是使用变量在定义变量之前就会有影响。
举个简单的例子:
console.log(a);
var a=1
这样的一个语句,照理来说打印的应该是1,其实不是,打印的是undefined。因为这里就发生了变量的声明提升,使用变量在在定义变量之前。 会变成
var a ;
console.log(a);
a=1
这样的一个顺序来执行,在打印的时候a是还没赋值的,所以是undefined。
还有就是在函数中,也会发生变量的声明提升
var a=1;
function test(){
console.log(a);
var b=2;
};
test(a)
在函数里出现了使用变量在定义变量前,此时的变量的声明提升,就会影响结果了。
var a=1;
function test(){
var a ;
console.log(a);
a=2;
};
test(a)
函数不会使用实参a,是因为在函数里,已经有了一个var 定义的局部变量了。所以只会使用函数内部的a,此时是undefined,要是a前面的var 取掉,打印的a就是1了。
2.函数的变量提升
函数使用function方式定义时,使用在定义前,发生的声明提升不会影响。
test('吮指鸡');
function test(name){
console.log(name);
}
此时能正常打印”吮指鸡“,是因为函数声明提升后代码变成了
function test(name){
console.log(name);
}
test('吮指鸡');
使用在定义之后了,所以能正常打印,函数提升后,会预先运行一遍里面的逻辑。
但是以函数表达式的方式这样的顺序会造成错误。
test'吮指鸡');
var test= function(name){
console.log(name);
}
这种函数的定义是以变量的赋值方式定义的,会以变量的声明提升来运行
var test;
test'吮指鸡');
test= function(name){
console.log(name);
}
这时候test还不是一个方法,所以会报错。
以函数声明的方式进行的声明提升,会把整个函数体提升到顶部,所以没什么问题,而以表达式进行的函数,会进行变量的声明提升,只提升了函数名,没提升函数体。所以会报错。
要是两个方法都写了,会以谁现在前面,谁第一个提升到顶部。
3.函数和变量同名时
函数会把变量覆盖掉
综上:最好先定义好函数或变量,再进行使用,以防出错。
4.什么是预解析
JS的解析器在页面加载的时候,首先检查页面上语法的错误,把变量提升上来,成员变量只提升变量名,不提升变量值,所以这时候的变量是没有值的,函数是所有内容全部提升。(function直接定义的)
作用:
1.解析语法错误
2.变量声明提升的时候和函数整体提升(变量提升时只提升变量名,不提升变量值)
二、变量的分类
1.全局变量
在js文件任何地方都能访问到的变量叫全局变量。
1.在js文件除了函数里,用 var 或者没有var定义的变量
2.函数内部不带var 的变量,但必须运行了这个函数,外面才能访问到这个变量,直接写,不运行这个函数,外面是访问不到这个变量的。
全局变量的特点:
1.任何地方都能访问到。
2.不能被delete删除
3.函数内不带var 的变量,会先找函数外部有没有定义这个变量,沿着作用域链一直找,没找到就会将这个变量绑定到window上,所以说一点要运行才能访问到这个变量,不然是没有绑定到window对象上的。
4.全局变量是绑定到window对象上的。
5.网页关闭才会销毁全局变量。
2.局部变量
在规定地方才能访问到的变量叫局部变量
1.函数内部带var的变量。
2.形参。
局部变量的特点:
1.只能在指定地方访问
2.出了作用域范围就销毁了。
3.隐式全局变量
没搞懂
回来写
4.手动解除变量占用
给变量赋值null即可。