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
JavaScript变量相关推荐
- JavaScript 变量
变量是存储信息的容器. 实例 var x=2; var y=3; var z=x+y; 亲自试一试 就像代数那样 x=2 y=3 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 2). ...
- javascript变量声明 及作用域
javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...
- 使用JavaScript变量需要注意哪些语法细节?
使用JavaScript变量需要注意哪些语法细节?JavaScript在很多地方经常会涉及到,尤其是JavaScript变量这方面,在使用变量时,还有一些值得注意的语法细节,下面进行详细讲解. 使用J ...
- javascript 变量监听器
javascript 变量监听器 <!DOCdata html> <html lang="en"> <head><meta charset ...
- js html保存json,如何在json文件中存储jQuery或javascript变量?
我可以知道有没有机会将jquery变量保存在json文件中?提前致谢.如何在json文件中存储jQuery或javascript变量? 我: var image='/test/test.png'; 我 ...
- Javascript变量函数浅谈
一.变量 在javascript变量中可以存放两种类型的值:原始值和引用值. 原始值存储在栈上的简单字段,也就是值直接存储在变量所标示的位置内. 引用值存储在堆内的对象,栈内变量保存的是指向堆内对象的 ...
- Javascript 变量、函数的声明
javascript变量 全局变量和局部变量 按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量.全局变量的作用域是整个js文件,而局部变量的作用域 ...
- 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 ...
- JavaScript 变量的生存期
JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.
- javaScript变量、作用域链
变量 JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已. 变量分为基础类型值和引用类型值: 基本类型值指的是 简单的数据段(Undefined.Null.B ...
最新文章
- 5G 信令流程 — 5GC 的连接管理(CM,Connection Management)
- 《编写有效用例》导读书评——“Jolt大奖精选丛书”有奖征文
- hdu3460 字典树(打印机)
- 放置奇兵 算法 月度活动 破碎时空记录 第四关 双树精(大树)(格鲁)
- dp打开思路4:POJ1189 UVA12511 HDU2845 HBCPC K
- centos7开放端口访问不了_CentOS7搭建GateOne,实现WebSSH
- 简单的识别猫狗的模型
- topic1:Qt入门之搭建环境与hello world看Qt开发框架
- mysql 字符串函数
- c语言A 100 开头地址,C语言库函数_-_A开头
- python storm连接mysql_python ORM storm中的复合外键引用
- DEDECMS自动采集更新伪原创完美版插件
- 将pdf转换成jpg图片
- jetson agx xavier 系统源码编译及固件烧写
- 计算机的二进制算法与易图中,A.黑色素瘤B.脂肪瘤C.纤维瘤D.血管瘤E.皮脂腺囊肿1.好发于皮下、界限清楚、分叶状、生长较慢的肿瘤是()2.好发于皮下、质硬、生长缓慢的舯瘤是()...
- 执法智能眼镜 android,警用AR智能眼镜解决方案
- 撩小姐姐的小程序(二)----旋转3D八音盒
- 【正点原子FPGA连载】第十二章呼吸灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
- excel绘制回归直线
- sparse_to_dense()和sparse_tensor_to_dense()的用法
热门文章
- oracle 二表做差,oracle 两表数据对比---minus
- oracle批量替换保留字,Oracle中的关键字保留字
- JavaScript中md5加密基础使用方法
- 金融风控中英文术语手册(银行_消费金融信贷业务)_version5
- zabbix mysql trapper_zabbix的trapper(补获器)使用
- 云宏Ceph分布式存储高性能设计
- 简要分析用MD5加密算法加密信息(如有疑问,敬请留言)
- 信号与系统3-傅里叶变换与频域分析
- 如何登录设备(睿易篇)
- 为什么有的大厂,变量不能直接赋值undefined?