码迷,mamicode.com
首页 > 其他好文 > 详细

如何使程序更高效的执行?

时间:2015-04-22 00:22:52      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

在codewars网站做题,做到一下一道题。

var add = function (a, b) { 
return a + b; 
};
var lazy_sum = make_lazy(add, 2, 3);
Test.expect(lazy_sum() === 5, ‘Evaluates the expression when required‘);//这个是codewars网站特有的测试代码,自己运行要另行写
var double = function (n) { 
return n * 2; 
}; 
var lazy_value = make_lazy(double, 5);
Test.expect(lazy_value() === 10, ‘Evaluates the expression when required‘);
var superAdd = function () {
return Array.prototype.slice.apply(arguments).reduce(function (a, c) {
return a + c; }, 0);
};
var lazy_superSum = make_lazy(superAdd, 1, 2, 3, 4, 5);
Test.expect(lazy_superSum() === 15, ‘Evaluates the expression when required‘);

要我写一个make_lazy函数要使上面的代码能运行通过,然后我最后的答案是这样

var make_lazy = function () {
  // TODO: implement this function
  var arg = arguments; 
  return function(){
  return arg[0].apply(this,Array.prototype.slice.call(arg,1));
  }
};

是可以成功运行的。可是我还不明白就是它到底如何使程序更高效了。

不过通过这道题我对函数的参数arguments有了更深的理解,还有就是apply()函数的真正强大之处。

从上面我写得make_lazy函数可以看到,arguments参数返回的是一个object数组,不是string也不是array,可是slice()方法是array特有的,那么我又要想对这个arguments对象进行操作,这个时候apply()就能发挥用处,它能使用这个对象原本并没有的方法。简单一点的例子就是

var obj1 = {
    var x = 1;
    var a_ fuc = function(arg){
       alert(arg);
    }
};
var obj2 = {
    var x = 1;
    var b_fuc = function(arg){
        console.log(arg);
    }
};
var a = obj1;
var b = obj2;
a.a_fuc.apply(b,2);

a其实是没有定义a_fuc的方法,可是却能够调用,这就是apply的强大之处,call和apply基本差不多,就是传参数的形式有所不同,小伙伴们自己去了解了解吧。

 

如何使程序更高效的执行?

标签:

原文地址:http://www.cnblogs.com/brianwong/p/4445703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!