- <html>
- <head>
- <title>函数提升</title>
- <script language="javascript" type="text/javascript">
- //在全局对象中声明两个全局函数,反模式
- function foo()
- {
- alert("global foo");
- }
- function bar()
- {
- alert("global bar");
- }
- //定义全局变量
- var v = "global var";
- function hoistMe()
- {
- alert(typeof foo); //function
- alert(typeof bar); //undefined
- alert(v); //undefined
- //为什么bar函数和变量v是未定义而不是全局变量中定义的相应的函数变量呢?
- //因为函数里面定义了同名的函数和变量,无论在函数的任何位置定义这些函数和
- //和变量,它们都将被提升到函数的最顶部。
- foo(); //local foo
- bar(); //报错,缺少对象
- //函数声明,变量foo以及其实现被提升到hoistMe函数顶部
- function foo()
- {
- alert("local foo");
- }
- //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升
- var bar = function()
- {
- alert("local bar");
- };
- //定义局部变量
- var v = "local";
- }
- (function()
- {
- hoistMe();
- })();
- //函数表达式和变量表达式只是其声明被提升,函数声明是函数的声明和实现都被提升。
- /**由于函数提升的效果,hoistMe方法相当于
- function hoistMe()
- {
- //函数声明,变量foo以及其实现被提升到hoistMe函数顶部
- function foo()
- {
- alert("local foo");
- }
- //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升(同变量提升)
- var bar = undefined;
- //变量声明被提升
- var v = undefined;
- alert(typeof foo); //function
- alert(typeof bar); //undefined
- foo(); //local foo
- bar(); //报错,缺少对象
- bar = function()
- {
- alert("local bar");
- };
- v = "local";
- }
- */
- </script>
- </head>
- <body>
- </body>
- </html>
相关文章
- 09-13python函数定义中引用外部变量的一个问题
- 09-13python中函数的定义及调用
- 09-13华南农业大学OJ答案实验9:1083 编写函数计算阶乘;1124 函数中的变量;1059 [填空题]函数定义;1084 [填空题]十进制数转二进制数;1151 求函数值
- 09-13MFC中全局变量的定义及使用
- 09-13用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
- 09-13python中函数的定义,调用,全局变量,局部变量,函数的嵌套使用-初级篇
- 09-13python 函数定义自变量的写法及调用
- 09-13是否可以从javascript中的函数中定义全局常量
- 09-13JavaScript回调函数中的变量总是在循环中获得最后一个值?
- 09-13Javascript中变量提升的问题(五)