diff --git a/core/array.rb b/core/array.rb
index <HASH>..<HASH> 100644
--- a/core/array.rb
+++ b/core/array.rb
@@ -978,7 +978,7 @@ class Array
     }
   end
 
-  def zip(*others)
+  def zip(*others, &block)
     %x{
       var result = [], size = this.length, part, o;
 
@@ -998,6 +998,14 @@ class Array
         result[i] = part;
       }
 
+      if (block !== nil) {
+        for (var i = 0; i < size; i++) {
+          block.call($context, result[i]);
+        }
+
+        return nil;
+      }
+
       return result;
     }
   end
diff --git a/core_spec/core/array/zip_spec.rb b/core_spec/core/array/zip_spec.rb
index <HASH>..<HASH> 100644
--- a/core_spec/core/array/zip_spec.rb
+++ b/core_spec/core/array/zip_spec.rb
@@ -11,4 +11,13 @@ describe "Array#zip" do
     [1, 2, 3, 4, 5].zip(["a", "b", "c", "d"]).should ==
       [[1, "a"], [2, "b"], [3, "c"], [4, "d"], [5, nil]]
   end
+
+  it "calls block if supplied" do
+    values = []
+    [1, 2, 3, 4].zip(["a", "b", "c", "d", "e"]) { |value|
+      values << value
+    }.should == nil
+
+    values.should == [[1, "a"], [2, "b"], [3, "c"], [4, "d"]]
+  end
 end
Add block support to Array#zip