javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。

首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下:
大家都知道,变量是需要用var关键字声明的。但是javascript中也可以隐式的使用变量,就是不用声明,直接使用。而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的。
例如:

复制代码 代码如下:

function myName() {
i = 'abc';
}
myName();
function sayName() {
alert(i);
}
sayName();

输出结果为:abc

这说明变量i就是一个全局的变量,如果把上面的代码改成如下:

复制代码 代码如下:

function myName() {
var i='abc';
}
myName();
function sayName() {
alert(i);
}
sayName();

此时,游览器将没有任何输出结果,因为i 是在函数myName中定义的,所以它只是myName的局部变量,不可能被外部调用。

现在再回过头来看下面的代码:

复制代码 代码如下:

function myName() {
i = 'abc';
}
myName();
function sayName() {
alert(i);
}
sayName();

现在,我们进行一下改动,把myName();去掉,代码如下:

复制代码 代码如下:

function myName() {
i = 'abc';
}
function sayName() {
alert(i);
}
sayName();

此时,游览器也不会有如何反应。因为虽然i是全局变量,但是函数myName()并没有被调用,所以就相当于虽然声明了i,但是并没有给i赋予任何的值,所以没有任何输出。
同理,如果把上例改成:

复制代码 代码如下:

function myName() {

i = 'abc';
}
function sayName() {
alert(i);
}
sayName();
myName();

这种情况下还是不会输出任何结果,javascript代码的执行时从上到下的,在sayName()函数被调用时会检查变量i的值,此时函数myName尚未执行,也就是说i还没有被赋值,所以不会输出任何结果。

为了方便大家更好的理解,这里再举一个例子:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
i = 'a';
}
myloveName();
function myName() {
alert(i);
}
myName();

这次的结果是什么呢?
答案是a
首先,i的原始值是abc,但是当调用myloveName()函数之后,将i的值改为a,所以最后的输出结果是a。

如果将代码改为:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
var i = 'ai';
}
myloveName();
function myName() {
alert(i);
}
myName();

此时的结果就是abc了,因为代码中的两个i不一样,一个是全局的,一个是局部的,也可以这样理解,虽然两个i的名字一样,但是这两个i的本质却不一样,好像有两个名字一样的人一样,虽然名字一样,但却不是同一个人。

如果将代码改造成这样:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
i = 'ai';
}
function myName() {
alert(i);
}
myName();
myloveName();

相信大家可以自己算出结果了,结果是abc。

既然函数内部可以调用全局变量,那么下面这种情况呢:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
i = 'a';
alert(i);
}
myloveName();

此时变量的值是哪个呢?

我们来分析下:

首先全局变量i被赋值为:abc。

接下来myloveName()函数被调用,全局变量i被重新赋予新的值:a

所以结果肯定是:a

如果我们把alert提前呢,像这样:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
alert(i);
i = 'a';
}
myloveName();

这时候结果是什么呢?
经过验证结果是:undefined
如果代码是这样呢:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
alert(i);
}
myloveName();

此时i的结果是:abc

为什么会发生上面undefined情况,因为代码的执行顺序是从上到下的,在输出i之前并没有对i定义。所以从这里可以看出,使用代码的时候,变量的声明一定要放到代码的前面,以避免出现类似的问题!

同理:

复制代码 代码如下:

var i = 'abc';
function myloveName() {
alert(i);
var i = 'a';

}
myloveName();

这种情况下也会输出:undefined

好了,关于变量我只有这么多的介绍了,相信这些任何人都可以看明白。不管代码如何复制,其核心是不会变的。

转载于:https://www.cnblogs.com/yedliu/p/6517572.html

js中的局部变量和全局变量相关推荐

  1. java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别

    前言 Javascript中的变量定义方式有以下三种方式: 1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...

  2. python3 全局变量_Python3基础 当函数中的局部变量与全局变量同名了,各管各的...

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体. ------------------------------------- ...

  3. 理解LoadRunner中的局部变量和全局变量

    以下内容均选自个人作品:<精通软件性能测试与LoadRunner实战>   在C语言中,变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域,按作用域范围不同 ...

  4. shell中的局部变量与全局变量

    shell中的变量分局部变量和全局变量 bash的变量默认都是全局变量,脚本内都可以调用,无论在什么位置(函数体中也一样),即函数体外可以调用函数体内的变量 local一般用于局部变量声明,多在函数体 ...

  5. 在javascript中关于局部变量和全局变量简析

    最近见群里有一道关于面试的试题,考察的关于全局变量和局部变量的基础知识: fun foo(){ var a = b = 0; } 让选择a和b的值分别为多少,或许不仔细看,我们很可能把a和b都当成了局 ...

  6. 递归函数中局部变量和全局变量

    有时候会因为不注意递归函数中局部变量和全局变量,而导致结果和我们期望的不一致,递归中,在递归中的局部变量和全局变量,可以类似的看成函数调用时传递方式的按值传递(局部变量)和引用传递(全局变量) 局部变 ...

  7. php局部全局变量,PHP局部变量与全局变量

    一.局部变量 定义:在函数内部声明,且只能在函数内部调用的变量. 注意:参数也是局部变量的一种. demo1: 1 function demo1(){ 2     $age = 10; 3 } 4 5 ...

  8. C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)

    作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...

  9. python-函数-局部变量与全局变量

    本节知识点 进程启动获得资源 定义变量,定义函数,占用资源 函数内部定义的变量是局部变量 在当前进程作用范围内的变量是全局的变量 例子:租房市场,单间小房与客厅,小板櫈的使用权限 两个名词 >局 ...

最新文章

  1. CUDA简易安装教程
  2. Heartbeat+DRBD+NFS案例详解
  3. 人工智能:模型与算法 之 启发式搜索
  4. Torchlight(火炬之光)人物骨骼动画
  5. 阿里云对象存储OSS与文件存储NAS的区别
  6. Linux 双网卡绑定
  7. 【Es】Es 集群设置分片很大导致集群无法选举主节点异常等
  8. SDUT1500Message Flood(字典树)
  9. 代码管理学:如何给新员工安排工作
  10. erp采购总监个人总结_ERP采购总监总结
  11. 容联CC(呼叫中心)系统介绍
  12. Python学习之cookies及session用法
  13. 逆向Mac版WPS2019解除版本过期限制
  14. l310加完墨水后需要怎样设置_epsonl310打印机怎么补充墨水?
  15. centos 7.6编译安装nginx
  16. Mac解决mysql stop报错问题:The /usr/local/mysql/data directory is not owned by the ‘mysql‘ or ‘_mysql‘
  17. 【重庆大学917计算机专业基础综合】复习攻略
  18. 日本語トレーニング45
  19. 入门机器学习 21 天后 , 高薪 Offer 就在眼前
  20. RNN中BPTT的推导和可能的问题

热门文章

  1. hdu5343 后缀自动机+dp
  2. FTP中传输模式:BIN与ASC的差别
  3. SSH反向连接及Autossh
  4. 3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev
  5. hashlib 加密
  6. linux中断处理函数参数,第9章 设置ISR(中断处理函数)
  7. matlab app designer制作软件_gif制作软件app
  8. 郑州商品交易所与阿里云达成合作,推进核心数据分析平台建设
  9. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
  10. 回答面试官:我“腿特长”!阿里云小哥哥小姐姐咋看( 0 x 0 )?