javascript变量声明实例分析


Posted in Javascript onApril 25, 2015

本文实例讲述了javascript变量声明的方法。分享给大家供大家参考。具体分析如下:

js中使用一个变量之前应当先声明。变量使用关键字var来声明。

如果未在var声明语句中给变量指定初始值,则该变量值为undefined。
不用在声明变量时指定变量类型,js变量可以是任意数据类型。

使用var语句重复声明变量是合法且无害的。如果重复声明带有初始化器,则就和简单的赋值语句没啥区别。

如果试图读取一个没有声明的变量,则js会报错。在ECMAScript5严格模式下,给一个没有声明的变量赋值也会报错;然而从历史上来说,在非严格模式下,如果给一个未声明变量赋值,js实际上会给全局对象创建一个同名属性,且貌似它工作起来像一个正确声明的全局变量。这意味着你可以侥幸不声明全局变量,但这是一个坏习惯会造成很多bug,最好始终使用var来声明变量。

在函数体内,同名的局部变量会覆盖全局变量。
尽管全局作用域写代码可以不写var语句,但声明局部变量时必须使用var语句,参考如下代码:

scope = "global";
function foo(){
  scope="local"
  //fk!我们刚刚修改了全局变量!!!
}

在类似C语言的编程语言中,花括号中每一段代码都有各自的作用域,且变量在声明它们代码段之外是不可见的,我们称之为块级作用域(block scope);而js中没有块级作用域,而是取而代之的使用了函数作用域(function scope):变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的(无论是内嵌套还是外嵌套?)
js的函数作用域指在函数内声明的所有变量在函数体内始终是可见的,这意味着变量在声明前甚至可以使用了。js的这个特性非正式的称为声明提前(hoisting),即js函数里声明的所有变量(但没有赋值)都被“提前”至函数体的顶部。

var scope = "global";
function f(){
  console.log(scope);
  //输出"undefined"而不是"global"
  var scope = "local";
  //变量在这里赋初始值,但变量在函数体内任何地方均是有定义的
  console.log(scope);
  //输出"local"

以上代码等价于:

function f(){
  var scope;
  console.log(scope);
  scope = "local";
  console.log(scope);
  }

当声明一个js全局变量时,实际上定义了全局对象的一个属性。
当用var声明一个变量时,创建的这个属性时不可配置的,即无法用delete运算符删除;但当你没有使用严格模式并给一个未声明的变量赋值的话,js会自动创建一个全局变量,以这种方式创建的变量是全局对象的正常可配置属性,是可以删除的:

var x = 1; 
y = 2;
this.z = 3; //同上
delete x; //返回false,无法删除变量
delete y; //返回true,变量被删除
delete this.z //同上

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
JavaScript的单例模式 (singleton in Javascript)
Jun 11 Javascript
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
JavaScript中的包装对象介绍
Jan 27 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
jQuery的事件预绑定
Dec 05 Javascript
ES6关于Promise的用法详解
May 07 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
javascript显式类型转换实例分析
Apr 25 #Javascript
javascript原始值和对象引用实例分析
Apr 25 #Javascript
JavaScript分页功能的实现方法
Apr 25 #Javascript
JavaScript实现图片DIV竖向滑动的方法
Apr 25 #Javascript
JavaScript实现梯形乘法表的方法
Apr 25 #Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 #Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 #Javascript
You might like
mysql 性能的检查和优化方法
2009/06/21 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
做网页的一些技巧(续)
2007/02/01 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python中的引用知识点总结
2019/05/20 Python
Django框架反向解析操作详解
2019/11/28 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Python3 元组tuple入门基础
2020/02/09 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
小学开学典礼主持词
2014/03/19 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书