• 函数执行细节:当函数为f(a[i])的时候,会返回number的数值,如果函数无意义f([i])的时候,会返回i的数值.当返回的不是数字f(f[i])的时候会显示NaN。
    1. function map(f, a) {
    2. var result = []; // 创建一个数组
    3. var i; // 声明一个值,用来循环
    4. for (i = 0; i != a.length; i++)
    5. result[i] = f(a[i]);
    6. return result;
    7. }
    8. var f = function(x) {
    9. return x * x * x;
    10. }
    11. var numbers = [0,1, 2, 5,10];
    12. var cube = map(f,numbers);
    13. console.log(cube);//执行结果 0,1,8,125,1000
    14. function map(f, a) {
    15. var result = []; // 创建一个数组
    16. var i; // 声明一个值,用来循环
    17. for (i = 0; i != a.length; i++)
    18. result[i] = f([i]);
    19. return result;
    20. }
    21. var f = function(x) {
    22. return x * x * x;
    23. }
    24. var numbers = [0,1, 2, 5,10];
    25. var cube = map(f,numbers);
    26. console.log(cube);//执行结果 0,1,8,27,64
    27. function map(f, a) {
    28. var result = []; // 创建一个数组
    29. var i; // 声明一个值,用来循环
    30. for (i = 0; i != a.length; i++)
    31. result[i] = f(f[i]);
    32. return result;
    33. }
    34. var f = function(x) {
    35. return x * x * x;
    36. }
    37. var numbers = [0,1, 2, 5,10];
    38. var cube = map(f,numbers);
    39. console.log(cube);//执行结果 NaN,NaN,NaN,NaN,NaN
    40. function map(f, a) {
    41. var result = []; // 创建一个数组
    42. var i; // 声明一个值,用来循环
    43. for (i = 0; i != a.length; i++)
    44. result[i] = a(f[i]);
    45. return result;
    46. }
    47. var f = function(x) {
    48. return x * x * x;
    49. }
    50. var numbers = [0,1, 2, 5,10];
    51. var cube = map(f,numbers);
    52. console.log(cube);//执行结果 报错:a不是一个函数
    • 函数指向并调用自身(调用自身叫递归)有三种方法:1 函数名。2 Argument.3 作用域下的一个指向该函数的变量名。 递归和循环类似:都执行重复代码,都需要一个终止条件(避免无限循环或者无限递归)。 递归转换为非递归可以使用函数堆栈
    • JavaScript语言有好些个顶级的内建函数:

    (1)eval()方法会对一串字符串形式的JavaScript代码字符求值。
    (2)uneval()方法创建的一个Object的源代码的字符串表示。
    (3)isFinite()函数判断传入的值是否是有限的数值。 如果需要的话,其参数首先被转换为一个数值。
    (4)isNaN()函数判断一个值是否是NaN。注意:isNaN函数内部的强制转换规则十分有趣; 另一个可供选择的是ECMAScript 6 中定义Number.isNaN() , 或者使用 typeof来判断数值类型。
    (5)parseFloat() 函数解析字符串参数,并返回一个浮点数。
    (6)parseInt() 函数解析字符串参数,并返回指定的基数(基础数学中的数制)的整数。
    (7)decodeURI() 函数对先前经过encodeURI函数或者其他类似方法编码过的字符串进行解码。
    (8)decodeURIComponent()方法对先前经过encodeURIComponent函数或者其他类似方法编码过的字符串进行解码。
    (9)encodeURI()方法通过用以一个,两个,三个或四个转义序列表示字符的UTF-8编码替换统一资源标识符(URI)的某些字符来进行编码(每个字符对应四个转义序列,这四个序列组了两个”替代“字符)。
    (10)encodeURIComponent() 方法通过用以一个,两个,三个或四个转义序列表示字符的UTF-8编码替换统一资源标识符(URI)的每个字符来进行编码(每个字符对应四个转义序列,这四个序列组了两个”替代“字符)。
    (11)已废弃的 escape() 方法计算生成一个新的字符串,其中的某些字符已被替换为十六进制转义序列。使用 encodeURI或者encodeURIComponent替代本方法。
    (12)已废弃的 unescape() 方法计算生成一个新的字符串,其中的十六进制转义序列将被其表示的字符替换。上述的转义序列就像escape里介绍的一样。因为 unescape 已经废弃,建议使用decodeURI()或者decodeURIComponent 替代本方法。

    • 闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数将的生存周期比内部函数执行时间长当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。