js 变量 函数名的提升
2015-06-27 17:27
651 查看
函数定义时候
function 函数名(){
......
}
调用时候,可以在函数之前调用 函数名();这就是函数名的提升
如果采用赋值的方式定义函数
例如
函数2 定义后直接提升到代码头部,所以第一个 alert(foo)打印函数2的内容。
函数1定义后,相当于覆盖了函数2的定义,所以onload中的alert打印函数1的内容。document.write
执行函数一也就理所应当了。如果没有函数2,在上面调函数foo将会打印undefined,也就是这种方式函数不会提升
其实函数一在生命时候,变量foo也提升至代码头部 ,但是没有赋值,执行到函数1位置时候才将匿名函数赋值给变量foo。
既然如此,变量foo 和函数foo 均提升到代码头部,那么代码如果改成这样,第一个alert() 会执行foo函数还是foo变量那?
结果是:执行函数foo ,不管 var foo 变量跟foo(x)函数的位置如何互换。
那么是不是可以说,同级别相同名字的函数和变量同时声明,不管位置如何,函数都会覆盖变量?可以看到变量只声明,却没有赋值,如果为变量赋值的话 将上诉代码改成var foo =2;并与函数调换位置试验下,第一个alert()会怎么工作那,结果是照样打印函数内容。 代码如下:
alert只打印变量,函数总是报错。看来同名的函数和变量会有这么多需要注意的地方,实际编程就不要这样做了吧。
function 函数名(){
......
}
调用时候,可以在函数之前调用 函数名();这就是函数名的提升
如果采用赋值的方式定义函数
例如
<pre name="code" class="javascript"><script type="text/javascript"> alert(foo); //打印函数2 window.onload=function(){ alert(foo);//打印函数1 将2覆盖 document.write(foo(20)); //执行函数1 } //赋值定义函数 函数1 var foo = function(){ return 11; } //声明式定义函数 函数2 function foo(x) { if (x > 100) { var tmp = x - 100; } return tmp; } </script>
函数2 定义后直接提升到代码头部,所以第一个 alert(foo)打印函数2的内容。
函数1定义后,相当于覆盖了函数2的定义,所以onload中的alert打印函数1的内容。document.write
执行函数一也就理所应当了。如果没有函数2,在上面调函数foo将会打印undefined,也就是这种方式函数不会提升
其实函数一在生命时候,变量foo也提升至代码头部 ,但是没有赋值,执行到函数1位置时候才将匿名函数赋值给变量foo。
既然如此,变量foo 和函数foo 均提升到代码头部,那么代码如果改成这样,第一个alert() 会执行foo函数还是foo变量那?
alert(foo); //打印函数2 window.onload=function(){ alert(foo); document.write(foo(200)); } function foo(x) { if (x > 100) { var tmp = x - 100; } return tmp; } var foo;
结果是:执行函数foo ,不管 var foo 变量跟foo(x)函数的位置如何互换。
那么是不是可以说,同级别相同名字的函数和变量同时声明,不管位置如何,函数都会覆盖变量?可以看到变量只声明,却没有赋值,如果为变量赋值的话 将上诉代码改成var foo =2;并与函数调换位置试验下,第一个alert()会怎么工作那,结果是照样打印函数内容。 代码如下:
<script type="text/javascript"> alert(foo); <span style="font-family: Arial, Helvetica, sans-serif;">//打印函数</span> alert(foo(200)); //打印函数 window.onload=function(){ alert(foo);//打印变量 document.write(foo(200)); //报错 } var foo =2; //在这赋值 ,声明提升 function foo(x) { if (x > 100) { var tmp = x - 100; } return tmp; } </script>如果改成这样
var foo =2; function foo(x) { if (x > 100) { var tmp = x - 100; } return tmp; } alert(foo)//打印2 因为函数飞升了; alert(foo(200)); //报错
alert只打印变量,函数总是报错。看来同名的函数和变量会有这么多需要注意的地方,实际编程就不要这样做了吧。
相关文章推荐
- 2015年JS摘抄
- js判断登录与否并确定跳转页面的方法
- 使用Gson将字符窜转化成Json格式
- js创建对象的几种方式
- Java、jsp、JavaScript的三者的区别与联系
- javascript 中==和===的区别
- Javascript 继承
- javascript中神奇的(+)加操作符
- Regular Expression in JavaScript
- 呼叫外部js文件并使用其内部方法
- 数组去重(数字和字符串)
- JavaScript知识点总结(命名规范,变量的作用域)
- 《JavaScript知识深入探秘》系列技术文章整理收藏
- 20150627原生js轮播器
- 关于javascript的单线程和异步的一些问题
- Cookie介绍及JavaScript操作Cookie方法详解
- [javascript]两段 javaScript 代码的逻辑比较
- JS浏览器兼容性处理
- js——BOM
- C#解析json文件的方法