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 相关文章推荐
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
Javascript实现单例模式
Jan 24 Javascript
jQuery插件fullPage.js实现全屏滚动效果
Dec 02 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
Jun 04 jQuery
VUE实现密码验证与提示功能
Oct 18 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
vue实现购物车功能(商品分类)
Apr 20 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
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Python 正则表达式操作指南
2009/05/04 Python
python3序列化与反序列化用法实例
2015/05/26 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
python实现简易云音乐播放器
2018/01/04 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
EJB的角色和三个对象
2015/12/31 面试题
烹调加工管理制度
2014/02/04 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
大学生暑假实习总结
2015/07/13 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
TS 类型收窄教程示例详解
2022/09/23 Javascript