JavaScript学习记录二:变量

一、什么是变量

在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即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值