• 函数声明与函数表达式、对象实例化的区别
    • 对象实例化与函数声明与函数表达式的区别
    1. var i = 10;
    2. function add(j) {
    3. console.log(i+j);
    4. debugger;
    5. }
    6. add(1);
    7. })();
    8. (function(){
    9. var i = 10;
    10. var add = new Function("j", "console.log(i+j);debugger;");
    11. add(1);
    12. })();
    • bind的使用
    1. function Point(x, y){
    2. this.x = x;
    3. this.y = y;
    4. }
    5. Point.prototype.move = function(x, y) {
    6. this.x += x;
    7. this.y += y;
    8. }
    9. var p = new Point(0,0);
    10. var circle = {x:1, y:1, r:1};
    11. var circleMove = p.move.bind(circle, 2, 1);
    12. circleMove();
    • 构造函数
    • 函数调用模式
    1. function add(i, j){
    2. return i+j;
    3. }
    4. var myNumber = {
    5. var helper = function(){
    6. this.value = add(this.value,this.value);
    7. }
    8. helper();
    9. }
    10. }
    • arguments转数组
    1. function add(i, j) {
    2. var args = Array.prototype.slice.apply(arguments);
    3. args.forEach(function(item){
    4. console.log(item);
    5. })
    6. }
    7. add(1,2,3);
    • arguments.callee使用
    • 递归
    1. function factorial(i){
    2. if (i==0) {
    3. return 1;
    4. }
    5. return i*factorial(i-1);
    6. }
    • 普通递归函数跟记忆函数调用次数对比
    1. var factorial = (function(){
    2. var count = 0;
    3. var fac = function(i){
    4. count++;
    5. if (i==0) {
    6. console.log('调用次数:' + count);
    7. return 1;
    8. }
    9. return i*factorial(i-1);
    10. }
    11. return fac;
    12. for(var i=0;i<=10;i++){
    13. console.log(factorial(i));
    14. }
    15. //记忆函数
    16. var factorial = (function(){
    17. var memo = [1];
    18. var count = 0;
    19. var fac = function(i){
    20. count++;
    21. var result = memo[i];
    22. if(typeof result === 'number'){
    23. console.log('调用次数:' + count);
    24. return result;
    25. }
    26. result = i*fac(i-1);
    27. memo[i] = result;
    28. return result;
    29. }
    30. return fac;
    31. })();
    32. for(var i=0;i<=10;i++){
    33. console.log(factorial(i));
    34. }
    • curry 函数柯里化
      • 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术
    • 定时器
    1. function set_loop() {
    2. var i =1;
    3. setTimeout(function () {
    4. i = i + 1;
    5. console.log(i);
    6. set_loop()
    7. }