JavaScript中局部变量与全局变量

  我们知道,JavaScript的变量是松散型的变量,也就是说,其变量只需用var声明,其赋值的类型是不限定的。比如:

var person=18;
person="zhuzhenwei";

   即先给person保存了一个number类型的值,之后还可以保存一个string类型的值,但是,这种做法是不推荐的

甚至我们都可以直接给一个变量赋值,而不需要声明。比如:

person=18;
person="zhuzhenwei";

  接下来,我说一下全部变量与局部变量的不同。如下:

function add(){
var num=5;
console.log(num);
}
add();
alert(num);

  如果你认为这时会弹出一个窗口,显示为5,那你就错了!!这是因为,一旦在函数中我们用var声明了一个变量,那么用var操作符定义的变量将成为定义该变量的作用域中的局部变量(多读两遍啊),于是,num即为局部变量,且这个变量在函数退出后就会被销毁,所以我们用alert(num);就得不到想要的弹出窗口了。而会在console控制台中提示错误:

Uncaught ReferenceError: num is not defined

  

  如果省略var操作符,那么该变量就是一个全局变量。

  于是,我们去掉试一试:

function add(){
num=5;
console.log(num);
}
alert(num);

  这时候,发现控制台提示了与上面同样的错误!!

这是为什么呢?

 仔细对比一下,你会发现我漏掉了add();这个调用函数。由于当函数被调用时,才会创建该变量并为其赋值。因此,如果我们没有调用该函数,num这个变量就永远不会被创建,更不可能alert了!

  下面我们补充完整。

function add(){
num=5;
console.log(num);
}
add();
alert(num);

  ok,这样就可以得到我们想要的结果了。

JavaScript中局部变量与全局变量的不同的更多相关文章

  1. 对JavaScript中局部变量、全局变量和闭包的理解

    对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域 ...

  2. 对js中局部变量、全局变量和闭包的理解

    对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域 ...

  3. [转]深入探讨C语言中局部变量与全局变量的作用域与存储类别

    C语言中局部变量和全局变量变量的作用域与存储类别(auto,static,extern,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元, ...

  4. php中局部变量和全局变量

    php中局部变量和全局变量 代码1:函数内部使用函数外部变量错误方法 <?php $name = 'fish'; function animal() { echo $name; } animal ...

  5. javascript 关于局部变量和全局变量

    js中函数运行过程不仅仅是单纯的局部变量覆盖全局变量.和函数里面的声明情况有关. 比方: <script> var a =1; function test(){ alert(a); //a ...

  6. Labview中局部变量和全局变量

    局部变量的作用域是整个VI,它用于在单个VI中传输数据: 全局变量的作用域是整台计算机,它主要用于多个VI之间共享数据

  7. javascript当中局部变量和全局变量

    2)局部变量和全局变量 马克-to-win:浏览器里面 window 就是 global,通常可以省.nodejs 里没有 window,但是有个叫 global 的.例 3.2.1<html& ...

  8. sql server中局部变量与全局变量的 申明与赋值(转)

    来源:http://www.111cn.net/database/mssqlserver/36734.htm 例子:http://www.cnblogs.com/sunxi/p/4497493.htm ...

  9. JavaScript中的坑--全局变量惹得祸

    js中变量的作用域及闭包的概念   概述 身为一名程序员,因为bug周末加班是必不可少的事情,当解决bug的时候,总有些bug是因为规范导致的,但是这些bug往往不好找,也就是"前人挖坑,后 ...

随机推荐

  1. NPOI2.0学习(二)

    如果你要编辑的行和单元格,原本没有值,或者从未创建过的,就必须先创建. //在第二行创建行 IRow row = sheet.CreateRow(); //在第二行的第一列创建单元格 ICell ce ...

  2. SQL语言概述

    功能概述 DDL,数据库定义语言,创建,修改,删除数据库,表,视图,索引,约束条件等 DML,数据库操纵语言,对数据库中的数据进行增,删,改,查 DCL,数据库定义语言,对数据库总数据的访问设置权限 ...

  3. Ubuntu下安装支付宝安全控件

    在淘宝购物时,安装支付宝安全控件.下载了一个文件.tar.gz(非常小的一个文件). tar -zxvf 解压之,只有一个aliedit.sh文件,运行这个文件就安装成功了,重启firefox就可以用 ...

  4. "此站点已经禁用应用程序"在sharepoint 2013中通过v2013部署app提示该错误

    该错误的原文是:the apps are disabled in this site 可以在yahoo或者bing上搜索这个错误,可以找到解决办法: msdn上也有该错误解决办法,但是如果搜索中文,目 ...

  5. 1103简单SQL 行转列思路

    转自http://www.cnblogs.com/lhj588/p/3315876.html -- 经典行列转化DROP TABLE IF EXISTS TabName;CREATE TABLE Ta ...

  6. ClipDrawable 实现图片渐变现实

    clip.xml <?xml version="1.0" encoding="utf-8"?><clip xmlns:android=&quo ...

  7. [转]Java使用commons-dbcp2.0

    原文地址:http://blog.csdn.net/jiutianhe/article/details/39670817 dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat ...

  8. mysql优化基础

    唯一索引(unique index)强调唯一,就是索引值必须唯一. create unique index [索引名] on 表名 (列名);alter table 表名 add unique ind ...

  9. html-css控制背景图全屏拉伸不重复显示

    在HTML中,当我们设置背景图,只能采用是否重叠.居中.重叠方向这几个选项 CSS3中设置 body { background:#3d71b8 url(../back_main.png); backg ...

  10. java-通讯stocket插件mina实例

    mina是对nio的具体实现.是目前比较高效和流行的nio(非阻塞式I/O)框架 mina主要包括: 其中服务端为:NioSocketAcceptor 客户端为:NioSocketConnector ...