【JavaScript 学习--12】--js 中两种函数定义的区别:函数声明和函数表达式
2018-03-05 11:21
295 查看
在JS里面的函数实际上是对象,每个函数都是Function类型的实例,而且都与其它引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上是指向函数对象的指针, 不会与某个函数绑定。函数的定义有两种方式:函数声明和函数表达式。下面我们就对这两种方法进行总结。
一句话可以概括为:函数是对象,函数名是指针。
以上第二种方式(函数表达式)定义了变量sum并将其初始化为一个函数。注意该函数末尾有一个分号,就像声明其它变量一样。
所以由于函数名是指针,因此函数名与包含对象指针的其它变量没有什么不同。换句话说,一个函数可能会有多个名字。
例如:
以上代码完全可以正常运行,结果会为30。因为在代码执行之前,解析器就已经通过名为函数声明提升的过程,读取并将函数声明添加到执行环境了。对代码求值时,JS引擎在在预加载时就把声明函数放到源代码树的顶端了。所以,即使声明函数在调用它的代码后面,JS引擎也能把它提升到顶部。如果改成等价的函数表达式,就会在执行期间报错。
以上代码会在运行期间产生错误,原因在于在执行到函数所在的语句之前,变量sum中不会保存对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上不会执行到下一行代码。
一句话可以概括为:函数是对象,函数名是指针。
函数声明 和函数表达式 定义
//函数声明 function sum(num1, num2) { return num1 + num2; } //函数表达式 var sum = function(num1, num2) { return num1 + num2; };
以上第二种方式(函数表达式)定义了变量sum并将其初始化为一个函数。注意该函数末尾有一个分号,就像声明其它变量一样。
所以由于函数名是指针,因此函数名与包含对象指针的其它变量没有什么不同。换句话说,一个函数可能会有多个名字。
例如:
function sum(num1, num2) { return num1 + num2; } alert(sum(10, 20)); // 30 var Fsum = sum; alert(Fsum(10, 20)); // 30 var sum = null; alert(Fsum(10, 20)); // 30
函数声明 和函数表达式 区别
实际上,JS解析器在向执行环境加载数据时,对函数声明和函数表达式并非一视同仁。解析器会预先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。所以请看下面例子:alert(sum(10, 20)); // 30 function sum(num1, num2) { return num1 + num2; }
以上代码完全可以正常运行,结果会为30。因为在代码执行之前,解析器就已经通过名为函数声明提升的过程,读取并将函数声明添加到执行环境了。对代码求值时,JS引擎在在预加载时就把声明函数放到源代码树的顶端了。所以,即使声明函数在调用它的代码后面,JS引擎也能把它提升到顶部。如果改成等价的函数表达式,就会在执行期间报错。
alert(sum(10, 20)); // unexpected identifier var sum = function(num1, num2) { return num1 + num2; }
以上代码会在运行期间产生错误,原因在于在执行到函数所在的语句之前,变量sum中不会保存对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上不会执行到下一行代码。
相关文章推荐
- 栋栋晓12:Javascript学习总结:函数声明和函数表达式的区别,apply和call的区别,
- js学习之函数声明与函数表达式区别[原创]
- 从零学JS高级程序设计一:定义函数的方式,函数表达式和函数声明的区别
- javascript 函数声明和函数表达式的区别(学习笔记)
- JavaScript基础:JS函数中声明的所有变量在整个函数中都是有定义的
- Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
- javascript 函数声明与函数表达式的区别介绍
- JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
- javascript:两种注释,声明变量,定义函数。
- javascript 中的函数声明和函数表达式区别
- JavaScript 函数声明、函数定义、匿名函数和闭包的区别
- js两种定义函数、继承方式及区别
- javascript 用函数语句和表达式定义函数的区别
- javascript 用函数语句和表达式定义函数的区别详解
- javascript 用函数语句和表达式定义函数的区别
- javascript 用函数语句和表达式定义函数的区别
- javascript 用函数语句和表达式定义函数的区别
- javascript两种不同形式函数定义的区别
- javascript 函数声明与函数表达式的区别
- javascript 用函数语句和表达式定义函数的区别 .