首页 > 代码库 > 【ECMAScript】es5学习笔记1——函数表达式
【ECMAScript】es5学习笔记1——函数表达式
一、es5中函数定义的两种形式:
1.函数声明
function a() { //here is you code }
2.函数表达式
var a = function() { //here is your code}
首先要明确的一点是,在es5中,函数是一种对象(object),或者说,函数是Object类的子类
a instanceof Function //truea instanceof Object //true
函数声明有一个非常重要的特征,函数声明提升,意思是,在执行代码之前会先对函数声明进行读取
sayHi();function sayHi() { console.log("hi!");}// hi!
而函数表达式则会把函数定义当作一个一般意义上的变量进行提升处理
sayHi();var sayHi = function(argument) { console.log("hi!");}// Uncaught TypeError: sayHi is not a function(…)
二、使用arguments.callee(类数组的arguments指向所在的函数的指针)来对函数进行递归调用,来达到解耦的目的。但是在严格模式下访问arguments.callee会出现错误(不允许访问),所以有一个更好的解决方案:命名函数表达式
下面是阶乘函数的两种实现
function factorial(num) { if(num<=1){ return 1; }else{ return num*factorial(num-1); } }//与函数名factorial存在强耦合,不佳!function factorial(num) { if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } }//不与函数名耦合var factorial = (function f(num){ if(num<=1) return 1; }else{ return num*f(num-1); }});//命名函数表达式
【ECMAScript】es5学习笔记1——函数表达式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。