【内容摘录自 MDN】变量作用域
有如下自定义函数:(此函数为全局函数,任何地方均可调用)
function output(value) {
var para = document.createElement('p');
document.body.appendChild(para);
para.textContent = 'Value: ' + value;
}
以下,访问函数正常
var x = 1;
function a() {
var y = 2;
output(y);
}
function b() {
var z = 3;
output(z);
}
function a() {
var y = 2;
output(x);
}
上面有 x,y,z 三个变量,但只有 x 是全局变量,可以任意地方使用, y,z 则只能在函数内部使用,或作为函数参数 传入 其它函数中作为实参使用。
存在问题
function myBigFunction() {
var myValue;
subFunction1();
subFunction2();
subFunction3();
}
function subFunction1() {
console.log(myValue);
}
function subFunction2() {
console.log(myValue);
}
function subFunction3() {
console.log(myValue);
}
上面代码会报错,说 myValue 未定义

因为 myValue 就局部作用域的变量,并不能被外部使用。你可能会疑惑,前面的 output(y) , output(z) 能正常使用,这里却不能,为什么呢?
因为 myValue 是局部变量,虽然 subFunction1\2\3 定义的是全局函数,而在外部使用 myValue 时,已经超出作用域范围了,在外部作用域中并没有 myValue 这个变量,所以会出现未定义变量的错。
倘若是将变量 myValue 作为 函数 subFunction1\2\3 的形参传递使用,便正常。

注意 for 、 if 的作用域,虽然其带有 {} 很像局部作用域,但别弄错了,它们不是。
var x = 1;
function a() {
var y = 2;
output(xx);
}
function b() {
var z = 3;
output(xxx);
}
for(var i = 0; i < 2;i ++){
xx = i;
}
if(1<3){
var xxx = 5;
}
a();
b();
function output(value) {
var para = document.createElement('p');
document.body.appendChild(para);
para.textContent = 'Value: ' + value;
}
以上会得到结果 2 和 5 ,所以, for 与 if 中定义的变量,均为全局作用域的变量,并不是局部作用域的变量。
【内容摘录自 MDN】变量作用域的更多相关文章
- Java基础知识笔记(七:接口、变量作用域和参数传递)
一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...
- PHP常量、变量作用域详解(一)
PHP 中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域.对于初学者来说,变量的作用域是它们所驻留的页面.因此, 如果你定义了 $var,页面余下部分就可以访问 ...
- PHP变量作用域详解(二)
学过C的人用PHP的时候一般会相当顺手,而且感到PHP太方便太轻松.但在变量作用域这方面却与C有不同的地方,搞不好会相当郁闷,就找不到错误所在.昨晚就与到这么一个问题,是全局变量在函数中的问题.今天搜 ...
- 变量作用域&函数作用域
一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部 ...
- PHP变量作用域以及地址引用问题
作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是 ...
- c语言变量作用域问题
c语言中的变量作用域总结 不管什么语言,main好像总是程序的入口,大括号是它的内容:变量的作用域总是困扰着我们,接下来,我们循序渐进的搞明白c语言中的变量作用域,首先得知道c是弱类型的语言,弱类型表 ...
- php中include文件变量作用域的研究
原文:php中include文件变量作用域的研究 在php中我们有时候需要include一个文件.比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件 ...
- JavaScript--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...
- day 14:深浅copy,数据结构 ,函数,set集合,变量作用域、返回值
本节内容: 1,深浅copy 2,数据结构 3,函数 4,变量作用域 5,返回值,return 一.深浅copy 首先理解当给变量赋值的时候,是给变量存在值所在的内存地址 a = 10000 b = ...
随机推荐
- django url映射的时候指定默认参数
使用path或者re_path后,在url中都可以包含参数,而有时候想指定默认的参数,可以通过在urls.py中写两个url都指向同一个视图函数.一个带参数一个不带参数.同时,在视同函数的参数中设置默 ...
- 概率DP (大概是最入门的题了) lightoj 1248
有一个骰子,n个面,问所有面都被摇出的期望. 转自**的博客, 因为概率是(n-k)/n 所以期望次数是1/(前面这个数) #include<cstdio> #include<a ...
- 【笔记】Linux进程间同步和进程绑定至特定cpu
#define _GNU_SOURCE #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ...
- PyCharm 上传项目到码云托管平台
码云平台设置: >先到码云 https://gitee.com/ 注册账号 >创建项目,选择合适项目,点击加号 >填写项目的基础信息 在码云上就创建了项目 >安装 Git ...
- 「JSOI2015」非诚勿扰
「JSOI2015」非诚勿扰 传送门 我们首先考虑一名女性选中她列表里第 \(x\) 名男性的概率(假设她列表里共有 \(s\) 名男性): \[ P = p \times (1 - p) ^ {x ...
- 运行composer出现do not run Composer as root/super user!
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer composer - ...
- Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解
Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解 说明:Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解,实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返 ...
- 猴博士4小时讲完C语言视频教程
猴博士4小时讲完C语言视频教程,一共有9节课. 目录结构如下: 目录:/2020030-猴博士4小时讲完C语言 [1G] ┣━━1.C语言基本语句(上)(更多资源访问:www.jimeng365.cn ...
- python日常题目小练习
1.使用while循环输出1 2 3 4 5 6 8 9 10 i=0 while i<10: i+=1 if i==7: continue print(i) 结果: 2.求1-100的所有数的 ...
- Map-HashMap 与 IF 判断内存占用对比
HashMap与IF判断内存占用对比,事实证明,Map对象在以下情况确实比IF判断占用内存低. HashMap占用内存:13000 package com.taiping.bky; import ja ...