js中函数声明与函数表达式


Posted in Javascript onJune 03, 2015

目前为止,我们一直没有对函数声明和函数表达式加以区别。而实际上,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。如下例子:

alert(sum(10,10));

function sum(num1,num2)

{

    return num1+num2;

}

以上代码完全可以正确执行,因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript引擎也能把函数声明提升到顶部。如果像下面的例子所示,把上面的函数声明改为等价的函数表达式,就会在执行的时候出现错误。

alert(sum(10,10));

var sum=function(num1,num2)

{

    return num1+num2;

};

以上代码会在运行的时候出现错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话讲,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。

除了声明时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的。

注:也可以同时调用函数声明和函数表达式,例如 var sum=function sum(){}。不过,这种语法在Safari中会导致错误。

以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。

Javascript 相关文章推荐
网页中实现浏览器的最大,最小化和关闭按钮
Mar 12 Javascript
编写兼容IE和FireFox的脚本
May 18 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
Jun 19 Javascript
js实现禁止中文输入的方法
Jan 14 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
浅谈ES6新增的数组方法和对象
Aug 08 Javascript
AngualrJs清除定时器遇到的坑
Oct 13 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
javascript数组的定义及操作实例
Nov 10 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
JavaScript基本语法讲解
Jun 03 #Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 #Javascript
ECMAScript中函数function类型
Jun 03 #Javascript
JavaScript运算符小结
Jun 03 #Javascript
浅谈JavaScript字符串与数组
Jun 03 #Javascript
详谈javascript中的cookie
Jun 03 #Javascript
jquery滚动特效集锦
Jun 03 #Javascript
You might like
德生PL550的电路分析
2021/03/02 无线电
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP中overload与override的区别
2017/02/13 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
python实现多张图片拼接成大图
2019/01/15 Python
Python判断telnet通不通的实例
2019/01/26 Python
用python绘制樱花树
2020/10/09 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
优秀护士获奖感言
2014/02/20 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
计划生育汇报材料
2014/12/26 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
Python函数对象与闭包函数
2022/04/13 Python