//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- WScript.Echo("Scenario: Multiple closures, with variables that are modified in the parent function"); function write(x) { WScript.Echo(x + ""); } function f() { var y = "before modification"; var ret1 = function() { WScript.Echo("1st function"); WScript.Echo(y); } y = "after modification"; var ret2 = function() { WScript.Echo("2nd function"); WScript.Echo(y); } return [ret1,ret2]; } (function() { function f() { write('In f'); } function g() { write('In g'); } var savef = f; f(f = g); f = savef; function foo() { write(typeof f); write(typeof g); } })(); function g(funcs) { funcs[1](); funcs[0](); } var clo = f(); g(clo); g(clo); // Side-effect through a closure without eval. (function(){ var f = function() { a = 2; return 1; } var a = 1; WScript.Echo(a + (f() + a)); })(); // Side-effect through a closure with eval. (function(){ var f = function() { a = 2; return 1; } var a = 1; WScript.Echo(a + (f() + a)); eval(""); })(); // Side-effect through a closure inside eval. (function(){ var f = function() { a = 2; return 1; } var a = 1; eval('WScript.Echo(a + (f() + a));'); })(); // No side-effect in nested function. (function(){ var f = function() { return 1; } var a = 1; WScript.Echo(a + (f() + a)); })();