Javascript学习笔记2 函数


Posted in Javascript onJanuary 11, 2010

就像我们可以写成这样的形式一样:

function Hello() { 
alert("Hello"); 
} 
Hello(); 
var Hello = function () { 
alert("Hello"); 
} 
Hello();

其实都是一样的。
但是当我们对其中的函数进行修改时,会发现很奇怪的问题。
<script type="text/javascript"> 
function Hello() { 
alert("Hello"); 
} 
Hello(); 
function Hello() { 
alert("Hello World"); 
} 
Hello(); 
</script>

我们会看到这样的结果:连续输出了两次Hello World。而非我们想象中的Hello和Hello World。
这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率。也就是说上面的一段代码其实被JS引擎预编译为这样的形式:
<script type="text/javascript"> 
var Hello = function() { 
alert("Hello"); 
} 
Hello = function() { 
alert("Hello World"); 
} 
Hello(); 
Hello(); 
</script>

我们可以通过上面的代码很清晰地看到,其实函数也是数据,也是变量,我们也可以对“函数“进行赋值(重赋值)。当然,我们为了防止这样的情况,也可以这样:
<script type="text/javascript"> 
function Hello() { 
alert("Hello"); 
} 
Hello(); 
</script> 
<script type="text/javascript"> 
function Hello() { 
alert("Hello World"); 
} 
Hello(); 
</script>

这样,程序被分成了两段,JS引擎也就不会把他们放到一起了。
Javascript 相关文章推荐
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
再谈Jquery Ajax方法传递到action(补充)
May 12 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
Sep 16 Javascript
vue-cli常用设置总结
Feb 24 Javascript
Angular网络请求的封装方法
May 22 Javascript
vue实现底部菜单功能
Jul 24 Javascript
Angular使用cli生成自定义文件、组件的方法
Sep 04 Javascript
Jquery动态列功能完整实例
Aug 30 jQuery
基于layui的下拉列表的数据回显方法
Sep 24 Javascript
新手入门js闭包学习过程解析
Oct 08 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
Javascript学习笔记1 数据类型
Jan 11 #Javascript
IE bug table元素的innerHTML
Jan 11 #Javascript
javascript instanceof 与typeof使用说明
Jan 11 #Javascript
javascript call方法使用说明
Jan 11 #Javascript
jQuery UI-Draggable 参数集合
Jan 10 #Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 #Javascript
js或css文件后面跟参数的原因说明
Jan 09 #Javascript
You might like
劣质的PHP代码简化
2010/02/08 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP5.3新特性小结
2016/02/14 PHP
Yii实现简单分页的方法
2016/04/29 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python scatter函数用法实例详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
python爬取招聘要求等信息实例
2020/11/20 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
建筑设计学生的自我评价
2014/01/16 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
我的生日感言
2015/08/03 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
协议书格式模板
2016/03/24 职场文书