Skip to content

Instantly share code, notes, and snippets.

@eliperelman
Created July 6, 2011 03:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eliperelman/1066518 to your computer and use it in GitHub Desktop.
Save eliperelman/1066518 to your computer and use it in GitHub Desktop.
Unlimited arguments
// Antipattern:
var preload = function (path) {
var img = new Image();
img.src = path;
};
preload('apple.png');
preload('banana.png');
preload('cheese.png');
preload('donut.png');
preload('egg.png');
preload('fish.png');
// Good pattern:
var preload = function () {
var args = Array.prototype.slice.call(arguments),
img;
for (var i = 0; i < args.length; i++) {
img = new Image();
img.src = args[i];
}
};
preload('apple.png', 'banana.png', 'cheese.png', 'donut.png', 'egg.png', 'fish.png');
// Alternate pattern:
var preload = function () {
var args = Array.prototype.slice.call(arguments),
img;
for (var i = 0; i < args.length; i++) {
img = new Image();
img.src = args[i];
}
};
var args = [ 'apple.png', 'banana.png', 'cheese.png', 'donut.png', 'egg.png', 'fish.png' ];
preload.apply(args);
@atk
Copy link

atk commented Jul 6, 2011

You can omit the slice.call - arguments has a length and can be iterated like an array (only without its methods). Since the Image Object is not needed furthermore, you can use it anonymously:

var preload = function(){
  for (var i = 0, l = arguments.length; i < l; i++) {
     (new Image()).src = arguments[i];
  }
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment