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

定义(声明)变量

用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

JavaScript变量相关推荐

  1. JavaScript 变量

    变量是存储信息的容器. 实例 var x=2; var y=3; var z=x+y; 亲自试一试 就像代数那样 x=2 y=3 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 2). ...

  2. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  3. 使用JavaScript变量需要注意哪些语法细节?

    使用JavaScript变量需要注意哪些语法细节?JavaScript在很多地方经常会涉及到,尤其是JavaScript变量这方面,在使用变量时,还有一些值得注意的语法细节,下面进行详细讲解. 使用J ...

  4. javascript 变量监听器

    javascript 变量监听器 <!DOCdata html> <html lang="en"> <head><meta charset ...

  5. js html保存json,如何在json文件中存储jQuery或javascript变量?

    我可以知道有没有机会将jquery变量保存在json文件中?提前致谢.如何在json文件中存储jQuery或javascript变量? 我: var image='/test/test.png'; 我 ...

  6. Javascript变量函数浅谈

    一.变量 在javascript变量中可以存放两种类型的值:原始值和引用值. 原始值存储在栈上的简单字段,也就是值直接存储在变量所标示的位置内. 引用值存储在堆内的对象,栈内变量保存的是指向堆内对象的 ...

  7. Javascript 变量、函数的声明

    javascript变量 全局变量和局部变量     按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量.全局变量的作用域是整个js文件,而局部变量的作用域 ...

  8. C#与Javascript变量、函数之间的相互调用2008年11月28日 星期五 05:28 P.M.1.如何在JavaScript访问C#函数?

    C#与Javascript变量.函数之间的相互调用 2008年11月28日 星期五 05:28 P.M. 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3 ...

  9. JavaScript 变量的生存期

    JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.

  10. javaScript变量、作用域链

    变量 JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已. 变量分为基础类型值和引用类型值: 基本类型值指的是 简单的数据段(Undefined.Null.B ...

最新文章

  1. 5G 信令流程 — 5GC 的连接管理(CM,Connection Management)
  2. 《编写有效用例》导读书评——“Jolt大奖精选丛书”有奖征文
  3. hdu3460 字典树(打印机)
  4. 放置奇兵 算法 月度活动 破碎时空记录 第四关 双树精(大树)(格鲁)
  5. dp打开思路4:POJ1189 UVA12511 HDU2845 HBCPC K
  6. centos7开放端口访问不了_CentOS7搭建GateOne,实现WebSSH
  7. 简单的识别猫狗的模型
  8. topic1:Qt入门之搭建环境与hello world看Qt开发框架
  9. mysql 字符串函数
  10. c语言A 100 开头地址,C语言库函数_-_A开头
  11. python storm连接mysql_python ORM storm中的复合外键引用
  12. DEDECMS自动采集更新伪原创完美版插件
  13. 将pdf转换成jpg图片
  14. jetson agx xavier 系统源码编译及固件烧写
  15. 计算机的二进制算法与易图中,A.黑色素瘤B.脂肪瘤C.纤维瘤D.血管瘤E.皮脂腺囊肿1.好发于皮下、界限清楚、分叶状、生长较慢的肿瘤是()2.好发于皮下、质硬、生长缓慢的舯瘤是()...
  16. 执法智能眼镜 android,警用AR智能眼镜解决方案
  17. 撩小姐姐的小程序(二)----旋转3D八音盒
  18. 【正点原子FPGA连载】第十二章呼吸灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  19. excel绘制回归直线
  20. sparse_to_dense()和sparse_tensor_to_dense()的用法

热门文章

  1. oracle 二表做差,oracle 两表数据对比---minus
  2. oracle批量替换保留字,Oracle中的关键字保留字
  3. JavaScript中md5加密基础使用方法
  4. 金融风控中英文术语手册(银行_消费金融信贷业务)_version5
  5. zabbix mysql trapper_zabbix的trapper(补获器)使用
  6. 云宏Ceph分布式存储高性能设计
  7. 简要分析用MD5加密算法加密信息(如有疑问,敬请留言)
  8. 信号与系统3-傅里叶变换与频域分析
  9. 如何登录设备(睿易篇)
  10. 为什么有的大厂,变量不能直接赋值undefined?