"use strict";

by busyfmlyman

JavaScript

//"use strict";

var foo = "test";
function test(){}
 
// deleting variables or functions throw errors
delete foo;
delete test;
 
function test2(arg) {
    // deleting arguments throw errors
    delete arg;
}

// duplicate variables or keys throw errors
var bar = { foo: true, foo: false };

// attempts to assign a value to baz where baz hasn’t been defined will fail
baz = 0;

// virtually any attempt to use 'eval' throw errors
//obj.eval = 0;
//obj.foo = eval;
var eval = 0;
function eval(){}
function test(eval){}
//function(eval){}
new Function("eval");

// attempts to create a new var via eval are blocked
eval("var a = false;");
print( typeof a ); // undefined

// attempts to overwrite arguments throw errors
//function() {
     //arguments = [0,1,2];   
//}

/*
Any attempts to write to a property whose writable attribute is set to false, delete a property whose configurable attribute is set to false, or add a property to an object whose extensible attribute is set to false will result in an error. 
*/