JavaScript变量提升演示样例

直接先看两段代码

        function getSum() {
            var sum = a + b;
            var a = 1;
            var b = 2;
            return sum;
        }
        getSum();
        function getSum() {
            var sum = a + b;
            a = 1;
            b = 2;
            return sum;
        }
        getSum();

大家能够先看一下这两段代码的异同,并推断一下运行后分别得到的结果。

在运行第一段代码时,得到的NaN,这是由于在函数中变量声明被提升的结果。在运行“sum = a + b”前,先进行了a,b的定义。但由于没有赋值(赋值不会被提升)。所以此时a。b的值均为undefined。终于变为sum = undefined + undefined,然后得到NaN的结果。

在运行第二段代码时。得到的却是“ReferenceError: a is not defined",抛出一个异常说a没有定义。在这里。函数中的a,b因为没有通过var定义,而被当成了全局变量,因此在函数中没有对a,b的声明进行提升。而在函数的一開始便运行了”sum = a + b"的操作,在运行这一句时,会沿着作用域量逐级往外找a与b的定义和值,因为在这里没有找到对应的定义(全局作用域也没有),从而抛出a没有定义异常(事实上b也会抛出没有定义异常)。

将第二段代码稍作改动,改成以下这样:

        a = b = 3;
        function getSum() {
            var sum = a + b;
            a = 1;
            b = 2;
            return sum;
        }
        getSum();

再运行这段代码。此时得到的是6,a、b的值在全局作用域中找到了。

时间: 2024-08-07 17:59:26

JavaScript变量提升演示样例的相关文章

PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉SQL语句的人使用.有了她,我们打造个性化的站点,能很方便的调用出数据库里面指定的内容.通过条件限制,我们能够调用出不同条件下的不同数据. 二.get标签样式 {get dbsource=" " sql=" "} {/get} 三.get 标签语法 1.get标签属性值

图标插件--jqplot实现柱状图及饼图,表盘图演示样例

柱状图 在jqPlot图表插件使用说明(一)中,我们已经能够通过jqPlot绘制出比較简单的线形图.通过查看源码.我们也能够看出,线形图是jqPlot默认的图表类型: [javascript] view plaincopy /** * Class: Series * An individual data series object.  Cannot be instantiated directly, but created * by the Plot oject.  Series propert

最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频播放演示样例2:GDI播放YUV, RGB 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface) 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture) 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV 最简单的视音频播放演示样例

Android之——多线程下载演示样例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46883927 一.概述 说到Android中的文件下载.Android API中明白要求将耗时的操作放到一个子线程中运行,文件的下载无疑是须要耗费时间的.所以要将文件的下载放到子线程中运行. 以下,我们一起来实现一个Android中利用多线程下载文件的小样例. 二.服务端准备 在这个小样例中我下面载有道词典为例.在网上下载有道词典的安装包,在eclipse中新建项目web.将下载

Lambda 表达式的演示样例-来源(MSDN)

本文演示怎样在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述.请參阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的具体信息,请參阅 Lambda 表达式语法. 本文内容 声明 Lambda 表达式 调用 Lambda 表达式 嵌套 Lambda 表达式 高阶 Lambda 函数 在函数中使用 Lambda 表达式 配合使用 Lambda 表达式和模板 处理异常 配合使用 Lambda 表达式和托管类型 声明 Lambda 表达式 演示样例 1

ThreadLocal使用演示样例

MainActivity例如以下: package cc.cv; import android.os.Bundle; import android.app.Activity; /** * Demo描写叙述: * ThreadLocal使用演示样例. * 关于ThreadLocal的官方文档描写叙述 * Implements a thread-local storage, that is, a variable for which each thread has its own value. *

java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类

MapGuide应用程序演示样例——你好,MapGuide!

图 3?4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程能够分为五个阶段.图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流. 1) 载入文件类型的数据,配置到外部数据库的连接,通过联接(Join)一个要素源到还有一个要素源扩展要素数据. 2) 通过引用要素源的数据和为要素应用样式创建图层. 3) 将图层结合起来创建地图. 4) 通过Internet或Intrant公布地图,使用户能够通过client浏览地图. 5) 使用MapGuide API为ser

[hadoop系列]Pig的安装和简单演示样例

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yahoo!捐献给Apache的一个项目,眼下还在Apache孵化器(incubator)阶段,眼下版本号是v0.5.0.Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运