变量的声明

  1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面。

  先看一下下面的例子:

(function(){
  alert(b)//b is not defined
  alert(a); //undefined
  var a = 200;
})()

  运行的结果分别是:b is not defined ; undefined

  分析: 变量a的声明被提前,所以最初代码相当于:

(function(){
  var a;//声明变量a
  alert(b)//b is not defined
  alert(a); //undefined
  a = 200; //(定义并)初始化变量a
})()

  b不用解释,因为找不到b,所以会报错。a是应为声明被提前了,所以可以找到a,但变量a并没有赋值,所以会输出undefined.

作用域:(全局作用域、函数作用域、eval作用域、ES6块级作用域)

  1.  函数体内部,局部变量的优先级比同名的全局变量优先级高。

var a = 100;
(function(){
alert(a)//undefined
var a = 200;
alert(a)//
})()

  运行上面的例子可以输出: undefined;200。

  分析:第一个alert为什么会是undefined呢?这里有变量的两个知识点:第一个是变量声明会提前,第二个就是局部变量的优先级比同名全局变量优先级高。上面的代码相当于:

var a = 100;
(function(){
var a;
alert(a)//undefined
a = 200;
alert(a)//
})()

在函数作用域内,变量a的声明被提前了,函数外全局变量a被函数内变量a覆盖。所以会输出undefined;第二个输出200是因为a=200被赋值的原因。

  2. ECMA2015 没有块级作用域,只有函数作用域和全局作用域 (ECMA2016 引入块级作用域)

var a = 100;
if(true){
alert(a);//
var a = 200;
alert(a);//
}

上面代码输出结果为:100,200。说明javascript是没有块级作用域的。javasctipt中唯一拥有作用域的结构的是函数function

综上:下面的代码的输出结果就好理解了

var a = 100;
var b = 200;
function test(){
alert(a); //undefined
alert(b); //
b = 300;
alert(b); //
var a = 1;
alert(a); //
}
test();

javascript 变量声明 和 作用域的更多相关文章

  1. javascript变量声明及作用域总结

    javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...

  2. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  3. 【转】javascript变量声明 及作用域

    javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...

  4. javascript变量声明前置

    变量声明前置: 所谓的变量声明前置就是在一个作用域块中,所有的变量都被放在块的开始出声明,下面举个例子你就能明白了 var a = 1; function main() { console.log(a ...

  5. JavaScript 变量声明提升

    JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...

  6. 浅谈JavaScript变量声明提升

    前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一 ...

  7. javascript变量类型及作用域

    javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...

  8. JavaScript变量声明与变量声明提前

    JavaScript变量声明 JavaScript中存储数据的容器称为变量.用关键字和标识符创建新变量的语句,称为变量声明.可以通过关键字var进行变量声明,在ES6中增加了let.const关键字声 ...

  9. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

随机推荐

  1. dede其他栏目页的logo没有完整显示怎么办?

    在首页完全没有问题,可是点击关于我们.联系我们.加入我们的时候logo图标是缺失的,这时候怎么办? 其实这个是css样式的问题,只要找到相对应页面的css,改一下他们的宽就可以了,如果高不够就自己调整 ...

  2. 系统信号-signal.h

    #define SIGSEGV 11 /* segmentation violation */ #define SIGSYS 12 /* bad argument to system call */ ...

  3. 安卓app测试之启动时间和电量监控

    一.启动时间监控 通过adb命令获取 adb shell am start -W /<packageName> /<activityName> 案例: adb shell am ...

  4. 表格 —— 一个单元格插入多个tags

    <st #st [columns]="columns" [data]="data" [bordered]='true'> <ng-templa ...

  5. 右键快捷打开Git Bash here失败

    右键快捷打开Git Bash here失败,提示: Error: Could not fork child process: Resource temporarily unavailable (-1) ...

  6. python多进程和多线程编程

    17 多线程和多进程并发 The modules described in this chapter provide support for concurrent execution of code. ...

  7. 监听微信端,手机端,ios端的浏览器返回事件,pc端关闭事件

    直接上代码了,可以监听微信端,手机端,iOS端的浏览器返回事件,关闭事件不支持 当进入该页面,我们就给这个history压入一个本地的连接.当点击返回.后退及上一页的操作时,就进行监听,在监听代码中实 ...

  8. Luogu P2176 [USACO14FEB]路障Roadblock

    解题思路 这是一道最短路题目,不知道大家有没有做过玛丽卡这道题目,如果没做,在做完这道题之后可以去拿个双倍经验哦 先求出一张图中的最短路径,并将其记录下来,我们首先思考:要有增量的前提是新的最短路径比 ...

  9. UVA - 820 Internet Bandwidth(最大流模板题)

    题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...

  10. eclipse c/c++配置

    先下载jdk,如果jdk装的是32位,eclipse也要下载32位的,64位也是一样.我用的是jdk7 64位. 下载eclipse,去官网上下载最新的http://www.eclipse.org/d ...