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. cmd执行命令返回执行信息

    /// <summary> /// 执行CMD语句 /// </summary> /// <param name="cmd">要执行的CMD命令 ...

  2. ueditor的优酷插件模式开发,目前开发了腾讯视频转换插件

    项目相关地址 源码:https://github.com/easonjim/ueditor_plugin bug提交:https://github.com/easonjim/ueditor_plugi ...

  3. JSTL——formatNumber标签

    使用场合: <fmt:formatNumber>标签用于格式化数字,百分比,货币 属性: 语法 如果使用pattern属性.这个属性可以让您在对数字编码时包含指定的字符.接下来的表格中列出 ...

  4. 屠蛟之路_乘风破浪_FifthDay

    乘风破浪 一艘大船 (我们写的几千行代码) 一片汪洋 (软工耗费的时间) 一群骚年 (一不小心就火了) 为救一位公主 (吃自助餐) 选择去跋山涉水,乘风破浪(解决bug,解决冲突) 毫不畏惧 (韧性) ...

  5. HTML5学习总结-09 拖放和手机触屏事件

    一 拖放 拖放(Drag 和 drop)是 HTML5 标准的组成部分.拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 课程参考 ht ...

  6. Objective-C学习笔记之for( int )机制

    NSArray *myArray = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4&q ...

  7. redhat安装VMware tools的方法

    如果我们仔细看的话, 就会发现在VMware软件界面的左下角处显示着 "you don't have VMware Tools installed",即我们还没安装VMware T ...

  8. CentOS7安装mysql5

    CentOS7的yum源中默认没有mysql. 1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5. ...

  9. C#中字符串的操作

    1.Replace(替换字符):public string Replace(char oldChar,char newChar);在对象中寻找oldChar,如果寻找到,就用newChar将oldCh ...

  10. bootstrap panel 和table的使用

    一.HTML中的页面内容 <div class="col-sm-12"> <!-- <div class="m-b-md" style= ...