diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index 315674be74c46ca189cf946f8016e5d7b1dfd9ae..fdb066eb1fe0bb193ed5cbe740590b8390831f52 100644
--- a/mode/javascript/javascript.js
+++ b/mode/javascript/javascript.js
@@ -298,6 +298,8 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
     var result = function() {
       var state = cx.state, indent = state.indented;
       if (state.lexical.type == "stat") indent = state.lexical.indented;
+      else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
+        indent = outer.indented;
       state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
     };
     result.lex = true;
diff --git a/mode/javascript/test.js b/mode/javascript/test.js
index a9cc993d3d92497042480b5e558cb30134039049..77cc695fef4d2dadb83ac9f91f89afbbad918567 100644
--- a/mode/javascript/test.js
+++ b/mode/javascript/test.js
@@ -128,6 +128,12 @@
      "  [keyword else]",
      "    [number 3];");
 
+  MT("indent_funarg",
+     "[variable foo]([number 10000],",
+     "    [keyword function]([def a]) {",
+     "  [keyword debugger];",
+     "};");
+
   MT("indent_below_if",
      "[keyword for] (;;)",
      "  [keyword if] ([variable foo])",