1. <html>
  2. <head>
  3. <title>函数提升</title>
  4. <script language="javascript" type="text/javascript">
  5. //在全局对象中声明两个全局函数,反模式
  6. function foo()
  7. {
  8. alert("global foo");
  9. }
  10. function bar()
  11. {
  12. alert("global bar");
  13. }
  14. //定义全局变量
  15. var v = "global var";
  16. function hoistMe()
  17. {
  18. alert(typeof foo); //function
  19. alert(typeof bar); //undefined
  20. alert(v); //undefined
  21. //为什么bar函数和变量v是未定义而不是全局变量中定义的相应的函数变量呢?
  22. //因为函数里面定义了同名的函数和变量,无论在函数的任何位置定义这些函数和
  23. //和变量,它们都将被提升到函数的最顶部。
  24. foo(); //local foo
  25. bar(); //报错,缺少对象
  26. //函数声明,变量foo以及其实现被提升到hoistMe函数顶部
  27. function foo()
  28. {
  29. alert("local foo");
  30. }
  31. //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升
  32. var bar = function()
  33. {
  34. alert("local bar");
  35. };
  36. //定义局部变量
  37. var v = "local";
  38. }
  39. (function()
  40. {
  41. hoistMe();
  42. })();
  43. //函数表达式和变量表达式只是其声明被提升,函数声明是函数的声明和实现都被提升。
  44. /**由于函数提升的效果,hoistMe方法相当于
  45. function hoistMe()
  46. {
  47. //函数声明,变量foo以及其实现被提升到hoistMe函数顶部
  48. function foo()
  49. {
  50. alert("local foo");
  51. }
  52. //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升(同变量提升)
  53. var bar = undefined;
  54. //变量声明被提升
  55. var v = undefined;
  56. alert(typeof foo); //function
  57. alert(typeof bar); //undefined
  58. foo(); //local foo
  59. bar(); //报错,缺少对象
  60. bar = function()
  61. {
  62. alert("local bar");
  63. };
  64. v = "local";
  65. }
  66. */
  67. </script>
  68. </head>
  69. <body>
  70. </body>
  71. </html>

Javascript中函数及变量定义的提升的更多相关文章

  1. JavaScript中函数的变量提升问题

    函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = fun ...

  2. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  3. JavaScript中var和this定义变量的区别

    JavaScript中var和this定义变量的区别 在js中声明变量时可以使用var和this,但使用this的有很大一部分参考书是没有的,经过查阅相关资料总结如下: 用var和this声明变量,存 ...

  4. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  5. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  6. JavaScript中函数的定义!

    JavaScript中函数的定义! 1 自定义函数(命名函数) function fun() {}; 2 函数表达式(匿名函数) var fun = function () {}; 3 利用 new ...

  7. javascript中函数声明和函数表达式的区别 分类: JavaScript 2015-05-07 21:41 897人阅读 评论(0) 收藏

    1.js中函数表达式的定义 表达式(expression)JavaScript中的一个短语,javascript会将其计算(evaluate)出一个结果.程序中的常量是一个最简单的表达式.变量名也是一 ...

  8. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  9. JavaScript中函数是不能重载原因

    以前有一次写JS插件的时候,由于后台写习惯了,妄想在JS中写重载函数,可惜不能成功,原因花了一点时间记了下来 首先要理解重载的含义:函数返回值不同或者形式参数个数不同但函数名相同的函数 JavasSc ...

随机推荐

  1. mysql基本sql语句大全(提升用语篇)

    1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:s ...

  2. Arcgis for JS之Cluster聚类分析的实现

    原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...

  3. out 和 ref 之间的区别整理

    ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.re ...

  4. windows server 2008服务器IIS绑定阿里云域名

    一.打开Internet 信息服务(IIS)管理器   二.将你的网站放到服务器目录下,比如D盘下的WWW文件夹.   三.在IIS中,添加网站,网站的物理路径指向第二部中创建的网站.   五.在绑定 ...

  5. saltstack之(五)数据系统Grains和Pillar

    一.grains 1.什么是grainsgrains:存储minion端的信息,包括一些网络.硬件等信息,保存在minion端.一般为静态信息,非经常变化的数据. 2.grains的使用:获取mini ...

  6. javascript设计模式学习之十四——中介者模式

    一.中介者模式的定义和应用场景 中介者模式的作用在于解除对象之间的紧耦合关系,增加一个中介者之后,所有对象都通过中介者来通信,而不是互相引用,当一个对象发生变化的时候,仅需要通知中介者即可.从而将网状 ...

  7. my.cnf详解

    [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir ...

  8. Lambda表达式实用

    public List<SettlementExportView> querySettlementExport(SettlementDemandQueryReq req) { JdbcQu ...

  9. java中DriverManager跟DataSource获取getConnection有什么不同?

    1.datasource是与连接池获取连接,而DriverManager是获取与数据库的连接! DriverManager类的主要作用是管理注册到DriverManager中的JDBC驱动程序,并根据 ...

  10. JAVA NIO系列(三) Buffer 解读

    缓冲区分类 NIO中的buffer用于和通道交互,数据是从通道读入缓冲区,从缓冲区中写入通道的.Buffer就像一个数组,可以保存多个类型相同的数据.每种基本数据类型都有对应的Buffer类: 缓冲区 ...