JS 中 函数、继承、闭包、作用域链。。。 一直都是硬伤,一碰到这样的问题头就大了。但是如果我继续着说:我不会,就真的无药可救了。要勇敢地说出:我的字典里就没有不会这个词,吼吼。。正好昨天在书城里看了本JS红宝书,还没有看完,先记录下:

Function-函数在JS中有两种使用方法:

(1)函数声明: 声明和调用是没有严格的先后顺序的

     Greet();    //executed correctly. there is not the strict order between declaration and invoking
//a standard statement of a function
function Greet (name) {
alert("Hello, " + (name || "JS"));
}

(2)函数表达式: 声明和调用是有顺序要求的

     //myFun();     //Wrong: Uncaught TypeError: Property 'myFun' of object [object Object] is not a function
//another statement: function expression
var myFun = function(name){
alert("Hello, " + (name || "JS"));
}
//like a variable, need to be declared firstly
myFun("Tom");

其他的区分倒不记得了,稍后去度娘那儿问下。现在用函数来展示下阶乘的递归实现:

     function factorial (num) {
if(num == 1)
return 1;
else
return num * factorial(num-1);
}
alert(factorial(5)); // 120 - OK

正常的使用。但在JS中Function也是一个对象,可以像一般变量那样使用,具体指代的是函数入口的指针,与委托类似。在不济,就是把整个函数的定义赋值给目标变量(我就是按照这种理解的)

     //used as a variable
var fact = factorial;
alert(fact(5)); // 120 - OK

但是这是个递归的实现,递归就是不断重复地调用自身。上面的用法就是把函数的实现过程委托给一个变量来执行。但是函数体中调用自身的函数仍然指向原函数,此时如果更改了原函数,结果就大不一样:

     factorial = function(){return 1};
alert(fact(5)); //5 - effected by the original function

这就是不严谨的Bug, 递归一般用arguments.callee来替代函数自身:

     // - correct usage
function factorial (num) {
if(num == 1)
return 1;
else
return num * arguments.callee(num-1);
}

还有另外一种用法:

     // mark
var myFactorial = (function f (num) {
if(num == 1)
return 1;
else
return num * f(num-1);
});
alert(myFactorial(5)); //

这种语法真没见过,Mark。。。

JavaScript 学习笔记 -- Function的更多相关文章

  1. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  2. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  3. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  5. Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  6. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  7. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  8. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

随机推荐

  1. 【BZOJ-3156】防御准备 DP + 斜率优化

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 951  Solved: 446[Submit][Status][Discuss] ...

  2. wpf数据绑定

    前段: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.c ...

  3. SPOJ GSS2 Can you answer these queries II

    Time Limit: 1000MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Description Being a ...

  4. bzoj2588 Count on a tree

    题意:给定一棵树,有点权,不带修改,询问路径点权第K大,强制在线. 这道题建主席树的方法好机智.按照BFS/DFS序建树,对于每个点,建出"这个点到根节点的路径上的点"组成的权值线 ...

  5. Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)

    org.springframework.web.filter中有一个特殊的类——DelegatingFilterProxy,该类其实并不能说是一个过滤器,它的原型是FilterToBeanProxy, ...

  6. 关于Unity3d粒子系统的小发现(天堂3技能释放)

    导入系统给的粒子包,发现了一个问题:系统的粒子都有移动轨迹. 而自己新建的空粒子系统却没有这个功能.顺便也复习一下粒子系统. Particle System (粒子系统): Duration(持续时间 ...

  7. Code笔记之:CSS+HTML display 属性

    display属性值:none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-bl ...

  8. javascript表单验证

    表单HTML <form action="" method="post"> <fieldset class="login" ...

  9. POJ1741:tree

    传送门 时隔一个月再次写点分治,比上一次要深入理解很多了.(虽然代码还是写不熟 模板题,不多说 //POJ 1741 //by Cydiater //2016.9.22 #include <cs ...

  10. 理解和使用 JavaScript 中的回调函数

    理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报  分类: JavaScript(4)    目录( ...