js变量详解

1.变量的声明

1)js变量有局部变量和全局变量之分,无论是局部变量还是全局变量最好都使用var声明

2)如果没有使用var声明一个变量,js会隐式声明该变量,且该变量为全局变量

3)可以使用var多次声明一个变量

4)尝试读取一个未声明的变量,js会报错

5)尝试读取一个未初始化的变量,js将得到一个默认值undefined

举例:

var i = 12;

var i = 34; //不会报错,只是对i进行重新赋值

alert(i); //得到34

j = 56; //隐式声明一个全局变量

alert(j); //得到56

var m;

alert(m); //得到undefined

alert(n); //由于没有声明n,所以产生错误!

2.变量作用域

1)全局(global)变量的作用域是全局的,即在js代码中处处有定义。

2)局部(local)变量的作用域是局部性的,只在特定的范围内,比如函数内部定义的变量,函数的参数变量,这些变量的作用范围是局限在函数的内部的。

3)声明全局变量可以不使用var关键字,局部变量则必须使用var关键字来声明,为了避免不必要的麻烦,养成所有的变量都使用var关键字来声明。

4)变量的定义没有块级作用域。在函数中声明的所有的变量,无论是在哪里声明的(只要是在函数内部),在整个的函数中都是有声明的。

举例:

<script type="text/javascript">

var scope = "12";

function f(){

alert(scope);//undefined

var scope = ‘34‘;

alert(scope);//34

}

f();

alert(scope);
//12

</script>

说明:

函数f外面的变量scope是全局变量。由于js没有块级作用域,只要在函数中声明了变量(无论在哪儿),它在整个函数中就是有声明的。在函数f中声明了局部变量scope,所以它在整个f中就是有声明的,局部变量scope会优于全局变量scope。

第一个alert语句中,由于scope是f中声明的变量,但是并没有进行初始化,所以得到默认值undefined。

第二个alert语句中,由于scope=‘34’已经执行,即scope进行了初始化,所以得到的是34.

第三个alert,直接得到的是全局变量scope。

注意区分两个概念:未定义的变量和未赋值的变量

未定义的变量:指没有声明且没有初始化的变量

未赋值的变量:指已经声明但是没有初始化的变量。

参考:http://www.cnblogs.com/shuaisam/archive/2012/04/06/2433390.html

时间: 2024-10-13 00:26:36

js变量详解的相关文章

JS 变量详解

关于JS中的变量 JS中的变量是松散类型的,可以存储任何类型的数据. JS变量松散类型的本质,决定了变量只是在特定时间用于保存特定值的一个名字而已. 由于不存在定义某个变量必须要保存何种数据类型的值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 用var关键字声明的变量,未经初始化时,保存的是一个特殊的值——undefined. 变量初始化仅仅是给变量赋一个值. 可以在一条语句中声明多个变量,初始化或不初始化皆可,变量之间用逗号隔开. 用var关键字声明的变量是定义该变量的作用域中的局

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

Node.js npm 详解

Node.js npm 详解 一.npm简介 安装npm请阅读前辈的文章,很详细的介绍. npm的全称:Node Package Manager. (1)通俗的理解 其实从字面意思就可以理解这个产品有什么作用翻译为"Node包管理器".对,就是Node的包的一个管理工具,目前我尝试的有 下载并安装包(npm install [pkg]) 升级安装包(npm update [pkg]) 卸载安装包(npm uninstall/rm [pkg]),可以指定卸载包的版本号 - 其实这些命令很

require(&#39;./expample.js).default详解

最近总碰到类似于 var a = require('./expample.js).default 这样的代码,感觉很奇葩,总结一波. 为什么会出现这个问题? import 是静态编译的,而 require 可以动态加载,也就是说你可以通过判断条件来决定什么时候去 require ,而 import 则不行,所以有时候我们会面临需要通过require 去导入一个es6模块(比如react-hot-loader官方demo :P) 当然,这只是场景之一. 前置知识 ES6 Module常用语法.譬如

PATH环境变量和CLASSPATH环境变量详解

大凡装过JDK的人都知道要安装完成后要设置环境变量,可是为什么要设置环境变量呢?环境变量有什么作用? 1)PATH详解: 计算机安装JDK之后,输入“javac”“java”之类的命令是不能马上被计算机正确执行的,因为计算机不知道到哪里去找这两个命令. 计算机如何查找命令呢?Windows操作系统根据PATH环境变量来查找命令.PATH环境变量的值是一系列路径,Windows操作系统将在这一系列的路径中依次查找命令,如果能找到这个命令,则该命令是可执行的:否则将出现“‘XXX’不是内部命令或外部

mysql show variables系统变量详解

mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选项来更改这些默认值.服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句可以更改动态全局变量.要想更改全局变量,必须具有SUPER权限. 服务器还为每个客户端连接维护会话变量.连接时使用相应全局变量的当前值对客户端会话变量进行初始化.客户可以通过SET SESSION var

Bootstrap transition.js 插件详解

Bootstrap transition.js 插件详解 时间 2015-01-27 12:12:00 博客园-原创精华区 原文  http://www.cnblogs.com/xyzhanjiang/p/4252513.html 主题 Bootstrap JavaScript Bootstrap 自带的 JavaScript 插件的动画效果几乎都是使用 CSS 过渡实现的,而其中的 transition.js 就是为了判断当前使用的浏览器是否支持 CSS 过渡.下面先来简单了解下 CSS 过渡

java环境变量详解---找不到或无法加载主类

刚学java,配置好环境变量之后,在DOS下却运行java小程序却始终出现"找不到或无法加载主类"然后返回配置环境变量折腾了好久,查看书籍.网上的资料,最终OK了!安装Eclipse始终出现 "could not find Java SE runtime environment"."could not find java dll"这样的问题,按照网上提供的资料却始终解决不了问题,最后将最新版本的Eclipse换了,才可以用. 以下是安装JDK的总

Shell学习之Bash变量详解(二)

Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这种变量中主要保存和系统操作环境相关的数据. 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的. 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的. Bash变量注意点 1.变量名称可以由字母.数字和下划线组成,但是不能以数字