JavaScript变量

变量是计算机语言中能储存计算结果或能表示值的抽象概念;变量不是数值本身,它们仅仅是一个用于存储数值的容器

定义(声明)变量

用var关键字声明
=代表赋值

var a = 5;

同时声明多个变量

使用’,'同时声明和初始化多个变量

 var a = 2,b=3;

注:实际开发中,不要刻意该特性

使用变量

  console.log(a);变量使用时不能加引号

改变变量的值

var a = 5;//定义变量a,并赋初值为5
a = 2;//更改变量a的值为2;改变变量的值,不需再书写var
console.log(a);//2

变量的默认值

变量只定义未赋初值,默认值是undefined
变量被var定义且赋初值之后,初始化完成

变量的常见错误

1.未用var定义,直接赋值;会产生作用域问题

a = 2;
console.log(a);//能输出2,但变量定义时必须要写var

2.既未用var定义又未赋值,会产生引用错误

标识符命名规则

1.首字符可以以下划线_、美元符$、字母开始,但不能以数字开始;其它字符可以是下划线_、美元符$、字母、数字
2.区分大小写
3.不能是关键字或保留字

标识符

是用来标识某个实体的符号(能自主命名的都可称为标识符)
在不同的应用环境下有不同的含义,例:变量、函数、数组、类名、对象的属性

预解析

一.作用域

作用域:作用的范围,指的是函数在哪些范围内可以用,而在其他部分就不可以使用,如果需要使用就需要重新定义。也可以理解为程序源代码中定义的这个变量的区域。
作用域的作用:用来执行读或者写的操作。
二、预解析规则

预解析规则: 对于script是自上而下进行解析,对于函数是由里到外进行解析。
浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码。
预解析:浏览器在开始工作的时候会先解读JS代码的关键字:比如:var function 参数等,并把解析到的内容存入一个类似仓库的地方,在这个阶段所有的变量,在正式运行代码之前,都会提前赋值为未定义。
预解析过程中如果函数和变量重名的话只会保留函数。
5.表达式可以修改预解析的值。
三、预解析

预解析:在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好,然后再从上到下执行js语句,预解析只会发生在通过var定义的变量和function上。
2.只要是通过var定义的,不管是变量,还是函数,都是先赋值undefined,如果是变量,也不管变量有没有赋值,在预解析阶段,都是会被赋值为undefined。
function进行预解析的时候,不仅是声明而且还定义(define)了,但是它存储的数据的那个空间里面存储的是代码是字符串,没有任何意义。
4.函数在预解释的时候,它把它分解成两部分来对待,第一部分是fn函数,而第二部分是(),一个匿名函数,执行时会报错。如果小括号带参数,虽然不会报错,会打印出来,但并不能把fn执行,也不能当成参数传递给fn函数。
5.预解析是发生在当前作用域下的,不会在同一个变量上重复的发生,也就是一个变量如果已经在当前作用域下预解析了,不会再重复解析。
预解析的过程:
第一步,会预先根据关键字var、function等,来查找一些需要被解析的东西。
第二步,给这些需要被解析的东西提前赋值,所有的变量,提前赋值:undefined;所有的函数,在正式运行代码前,都赋值为整个函数块。
第三步,“预解析”结束后,浏览器再逐行解读代码,并通过表达式:= + - * – ++ !等来修改这些“预解析”的值。
六、解析原则:

预解析规则:JavaScript “预解析”过程中,遇到重名的内容,只保留一个。重名变量或重名函数,保留最后的一个; 变量和函数重名,只保留函数。
根据作用域链,来查找上文第一步中提到的需要被解析的东西,查找原则:从上到下,从里到外,即先找局部作用域里找,然后子对象会一级一级向上寻找所有父对象的变量。
七、预解析在不同的ES

在ES5中,只存在全局和函数级作用域,在ES6中,引入了块级作用域。
js的预解析机制大概分为两个过程:预解析和自上而下逐行解读。
预解析:js解析器会先把var定义的变量、function、参数等一些东西存储进仓库里面(内存),变量var在正式运行之前,都赋值为undefined,function函数在运行之前,就是整个函数块。
逐行解读:表达式=、+、-、*、/、++、–、!、%…number()、参数都可以赋值。
5.遇到重名的,只留下一个,变量和函数重名,函数优先级高于变量,只留下函数。
函数调用(函数是一个作用域,遇到作用域都会按照先进行预解析,然后逐行解读的过程执行),先局部找参数,局部找不到就自下向上找(作用域链)。
————————————————
版权声明:本文为CSDN博主「浮生离梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42614080/article/details/90114780

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值