You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: test/es6/lambda1.js
+46Lines changed: 46 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -269,6 +269,52 @@ var tests = [
269
269
assert.areEqual('foo',k('foo')(),"lambda captures formal parameters named arguments");
270
270
}
271
271
},
272
+
{
273
+
name: "eval('arguments') works correctly within lambdas",
274
+
body: function(){
275
+
vararguments='not arguments object';
276
+
assert.areEqual(arguments,(()=>eval("arguments"))(),"arguments in lambda should bind to outside arguments since it is not given its own arguments binding");
277
+
278
+
functionh(){
279
+
return()=>{
280
+
assert.areEqual(5,eval("arguments.length"),"captured arguments length is respected");
281
+
assert.areEqual(h,eval("arguments.callee"),"arguments caller is respected");
282
+
assert.areEqual(1,eval("arguments[0]"),"first argument is 1");
283
+
assert.areEqual(2,eval("arguments[1]"),"second argument is 2");
284
+
assert.areEqual(3,eval("arguments[2]"),"third argument is 3");
285
+
assert.areEqual('abc',eval("arguments[3]"),"fourth argument is 'abc'");
286
+
assert.areEqual(null,eval("arguments[4]"),"fifth argument is null");
287
+
};
288
+
}
289
+
h(1,2,3,'abc',null)();
290
+
291
+
functioni(){
292
+
return()=>()=>{return()=>eval("arguments");};
293
+
}
294
+
varargs=i('a','b','c',123,undefined)()()();
295
+
296
+
assert.areEqual(5,args.length,"captured arguments (through multiple lambdas) length is respected");
297
+
assert.areEqual(i,args.callee,"arguments (through multiple lambdas) caller is respected");
298
+
assert.areEqual('a',args[0],"first argument (through multiple lambdas) is 'a'");
299
+
assert.areEqual('b',args[1],"second argument (through multiple lambdas) is 'b'");
300
+
assert.areEqual('c',args[2],"third argument (through multiple lambdas) is 'c'");
301
+
assert.areEqual(123,args[3],"fourth argument (through multiple lambdas) is 123");
302
+
assert.areEqual(undefined,args[4],"fifth argument (through multiple lambdas) is undefined");
303
+
304
+
functionj(){
305
+
vararguments='not an arguments object';
306
+
return()=>eval("arguments");
307
+
}
308
+
309
+
assert.areEqual('not an arguments object',j()(),"lambda captures local variables named arguments");
310
+
311
+
functionk(arguments){
312
+
return()=>eval("arguments");
313
+
}
314
+
315
+
assert.areEqual('foo',k('foo')(),"lambda captures formal parameters named arguments");
0 commit comments