description( | |
"This test checks that function declarations are treated as statements." | |
); | |
function f() | |
{ | |
return false; | |
} | |
function ifTest() | |
{ | |
if (true) | |
function f() | |
{ | |
return true; | |
} | |
return f(); | |
} | |
shouldBeTrue("ifTest()"); | |
function ifElseTest() | |
{ | |
if (false) | |
return false; | |
else | |
function f() | |
{ | |
return true; | |
} | |
return f(); | |
} | |
shouldBeTrue("ifElseTest()"); | |
function labelTest() | |
{ | |
label: | |
function f() | |
{ | |
return true; | |
} | |
return f(); | |
} | |
shouldBeTrue("labelTest()"); | |
function deepNesting () { | |
var y = ''; | |
{ | |
function foo() { return 'abc'; } | |
} | |
if (true) { | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
let x = 'abc'; | |
y = x; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return foo(); | |
}; | |
shouldBe("deepNesting()", "'abc'"); | |
function deepNestingForFunctionDeclaration () { | |
var y = ''; | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
function foo() { return 'abc'; } | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if (true) { | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
let x = 'abc'; | |
y = x; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return foo(); | |
}; | |
shouldBe("deepNestingForFunctionDeclaration()", "'abc'"); | |
eval(`function deepNestingInEval () { | |
var y = ''; | |
{ | |
function foo() { return 'abc'; } | |
} | |
if (true) { | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
let x = 'abc'; | |
y = x; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return foo(); | |
};`); | |
shouldBe("deepNestingInEval()", "'abc'"); | |
eval(`function deepNestingForFunctionDeclarationInEval () { | |
var y = ''; | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
function foo() { return 'abc'; } | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if (true) { | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
{ | |
let x = 'abc'; | |
y = x; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return foo(); | |
};`); | |
shouldBe("deepNestingForFunctionDeclarationInEval()", "'abc'"); |