java script中定义的var变量怎么在body中使用,深入分析JavaScriptvar中的预解析与副作用...

var的副作用

隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。

通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。

无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。

这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的:

在ES5严格模式下,未声明的变量(如在前面的代码片段中的两个反面教材)工作时会抛出一个错误。

单var形式

在函数顶部使用单var语句是比较有用的一种形式,其好处在于:

提供了一个单一的地方去寻找功能所需要的所有局部变量

防止变量在定义之前使用的逻辑错误

帮助你记住声明的全局变量,因此较少了全局变量//zxx:此处我自己是有点晕乎的…

少代码(类型啊传值啊单线完成)

单var形式长得就像下面这个样子:

您可以使用一个var语句声明多个变量,并以逗号分隔。像这种初始化变量同时初始化值的做法是很好的。这样子可以防止逻辑错误(所有未初始化但声明的变量的初始值是undefined)和增加代码的可读性。在你看到代码后,你可以根据初始化的值知道这些变量大致的用途,例如是要当作对象呢还是当作整数来使。

你也可以在声明的时候做一些实际的工作,例如前面代码中的sum = a + b这个情况,另外一个例子就是当你使用DOM(文档对象模型)引用时,你可以使用单一的var把DOM引用一起指定为局部变量,就如下面代码所示的:

vars变量预解析

JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。看下面这个例子:

在这个例子中,你可能会以为第一个alert弹出的是”global”,第二个弹出”loacl”。这种期许是可以理解的,因为在第一个alert 的时候,myname未声明,此时函数肯定很自然而然地看全局变量myname,但是,实际上并不是这么工作的。第一个alert会弹 出”undefined”是因为myname被当做了函数的局部变量(尽管是之后声明的),所有的变量声明当被悬置到函数的顶部了。因此,为了避免这种混乱,最好是预先声明你想使用的全部变量。

上面的代码片段执行的行为可能就像下面这样:

为了完整,我们再提一提执行层面的稍微复杂点的东西。代码处理分两个阶段,第一阶段是变量,函数声明,以及正常格式的参数创建,这是一个解析和进入上下文 的阶段。第二个阶段是代码执行,函数表达式和不合格的标识符(为声明的变量)被创建。但是,出于实用的目的,我们就采用了”hoisting”这个概念, 这种ECMAScript标准中并未定义,通常用来描述行为。

访问全局对象

在浏览器中,全局对象可以通过window属性在代码的任何位置访问(除非你做了些比较出格的事情,像是声明了一个名为window的局部变量)。但是在其他环境下,这个方便的属性可能被叫做其他什么东西(甚至在程序中不可用)。如果你需要在没有硬编码的window标识符下访问全局对象,你可以在任何层级的函数作用域中做如下操作:

这种方法可以随时获得全局对象,因为其在函数中被当做函数调用了(不是通过new构造),this总是指向全局对象。实际上这个病不适用于ECMAScript 5严格模式,所以,在严格模式下时,你必须采取不同的形式。例如,你正在开发一个JavaScript库,你可以将你的代码包裹在一个即时函数中,然后从全局作用域中,传递一个引用指向this作为你即时函数的参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

螺旋桨设计软件_第四届智能工业软件及设计技术研讨会暨2019天洑软件用户大会成功举办...

第四届智能工业软件及设计技术研讨会暨2019天洑软件用户大会于2019年6月13日-14日在辽宁省大连市召开。天洑软件用户大会至2019年已成功举办了四届,在历届会议中有来自中国、德国、瑞典、捷克、意大利、美国、加拿大、日本等各行业专家学者共同探讨最新的计算机智能…

php 上一条下一条,thinkPhp里添加显示上一条和下一条

newsinfo.php里的代码if($front[id]!null){$id $front[id];echo "上一条:$front[title]";}else{echo "上一条:没有了";}echo " ";if($after[id]!null){echo "下一条:$after[title]";}else{echo "下一条&#xff…

群晖 百度网盘_海康威视联合百度网盘推出NAS私有存储 贡献带宽获积分兑网盘会员...

此前百度网盘因为限速问题遭到不少用户的吐槽,随后百度网盘推出单次付费加速由于价格过高再次被吐槽。网盘类的服务也确实需要大量的硬盘空间和服务器带宽支撑,所以对用户来说最好的办法还是自己搭建网盘。自己搭建的网盘也就是私有云存储,放…

深信服python面试题_(完整版)往年的深信服笔试题(齐全)

•一,六道选择题(可以多选)1char*p"helloworld";p存储在()指向//堆栈charp[]"helloworld";p存储在()指向全局变量//数据段static变量//数据段分别在哪个地方?1数据段2代码段3堆4堆栈(此题可以配合同文件夹下的char.cpp)(二、例子程序…

matlab 特征值不排序,matlap 代码求解释!从这里开始即可%对特征值进行排序并去掉...

%人脸识别代码clear all % //removes all variables from the workspace. This frees up system memory.close all % //Delete specified figureclc% number of images on your training set.%训练集数目M16;%Chosen std and mean.%It can be any number that it is clos…

python有序队列_【Python】:拓展Queue实现有序不重复队列

最近手头有个需求是这样的,定期检查数据库获取失败任务并且进行重启。最早想到的是添加一个生产者&&消费者队列,但是发现很多棘手的问题。1.重启任务是调用的一个shell脚本然后在脚本中又调用python程序,所以任务完成的状态回传略纠结…

matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc

ode45求解多自由度动力学方程实例Ode45函数调用形式如下:[T,Y]ode45(odefun,tspan,y0)相关参数介绍如下:参数名称参数说明odefun用于存放待求解的方程的m文件名,方程必须用y’f(t,y)的形式存放tspan指定自变量范围的向量,通常用[t…

onenetsim定位功能吗_微信小程序新增后台定位功能,你会卸载地图APP用微信导航吗...

[PConline]8月8日,根据微信官方发布的消息显示,小程序新增后台定位功能,并对自动化测试功能进行了升级。据介绍,为了满足线路导航、路线记录等服务场景下,小程序需要长时间持续定位来提供服务。当用户主动将小程序设置…

pdo 错误 php,多语句查询中的PHP PDO错误

我在我的一个实时网络应用程序中遇到了这个问题.看来如果你通过PHP PDO向MysqL发出一个多语句查询,并且第一个语句是一个insert语句,而第二个语句是一个update语句,那么PDO :: nextRowset()函数不会返回正确的数字结果集(请注意,自PHP 5.3起,PDO应该支持每个MySQL查询的多个语句…

hbuid 集成svn_HBuilder如何配置SVN的步骤详解

前言本文主要给大家介绍了关于HBuilder如何配置SVN的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。注意:大家都配置前最好先备份好之前的文件资料很早之前就想在编辑器上配置SVN,但找了很多…

MATLAB静力学分析,锻造操作机静力学的Matlab仿真分析

由第3章中该新型锻造操作机的位置反解中的构件的位置以及角度的关系式,均为已知量。施加外力为Ftx50N,Fty300N和沿“轴方向的外力矩M 60000 N.mm。给定初始量范围,通过Matlab软件仿真,可以得到各个液压缸的驱动力的变化曲线。该新型锻造操作机…

babylonjs 设置面板位置_一篇关于开关面板的详细集合,值得收藏转发

对于大部分人来说,开关的布局,开关的种类都会是一脸懵。所以大家在装修的过程中就会迷茫,今天给大家分享一篇集合,相信通过这篇文章,问题会有所缓解~一,开关插座的分类1.电源开关分类:一位单控/…

php递归实现1 10阶乘,用递归实现1到100的和,1到10的阶乘

递归:方法定义中调用方法本身的现象注意实现:1.递归一定要有出口,否则就是死递归 StackOverflowError2.递归的次数不能过多,否则也会出现死递归特殊事项:构造方法不可以递归定义举例:从前有座山,山上有座庙&#xff0c…

xxljob 配置文件_最详细的xxl-job java配置方式spring-boot

转自:https://blog.csdn.net/weixin_44055234/article/details/106565516————XXL-JOB*是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。且支持线…

php怎么排除空的数组,【技术产品】php如何去除空数组

【摘要】对于初入门的php学习者肯定会有很多问题,今天考比过小编为大家整理了关于【技术产品】php如何去除空数组的信息,希望可以帮助到大家。下面就让我们一起来看下【技术产品】php如何去除空数组的具体内容吧!php如何去除空数组在php中可以…

ecs 云服务器 管理控制台_【弹性计算】教您快速学会云服务器ECS 创建命令!

云助手命令可以在ECS实例中快速完成运行自动化运维脚本、轮询进程、重置用户密码、安装或者卸载软件、更新应用以及安装补丁等一些日常任务。命令类型可以是Windows PowerShell脚本、Bat批处理命令和Linux Shell脚本,命令中支持自定义参数,方便设置变量值…

vue.js能美化界面吗_vue将单页面改造成多页面应用的方法

问题描述: 手头有一个项目是使用 vue-cli 搭建的单页面应用。项目分为了管理平台和用户查看页面,用户查看页面是很简单的页面,但是在加载过程中,却加载了整个应用的打包代码,量重且影响了响应和体验。我想要的效果是&a…

exoplayer 纯java,Exoplayer不播放任何视频

让Exoplayer工作有问题 . 我设法从网址加载视频 . 但它只播放音频 . 所以我做错了什么 .BandwidthMeter bandwidthMeter new DefaultBandwidthMeter();TrackSelection.Factory videoTrackSelectionFactory new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);TrackSel…

react 返回一个页面_React页面返回上一页时恢复原来页面的状态

需求:从一个横向纵向都有滚动条的列表页进入详情页,返回时列表页的活动条恢复到之前到位置。难点:1.列表用的是antd的table组件,滚动条是这个table组件的,浏览器返回时自身可以记录页面即document的滚动条,…

java mssql mysql,在JSP中访问MSSQLServer数据库_MySQL

SQL Server下面介绍如何用SQL Server实现一个动态FAQ(常见问题及答案)网站。首先建立一个数据库faq,其中的表faqs有字段id(int,自动增量,并设为主关键字)、subject(varchar,200)、answers(text)。这个表中可以存放一些编程知识的常…