Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
да, я знаю, что она причислена к Bad Parts из-за ненужности и неэффективности, но вот прямо сейчас я опровергну первое утверждениене убедили
foo = 10;
bar = 20;
with({
foo:20,
bar:10
}){
console.log(foo,bar); //20 10
}
console.log(foo,bar); //10 20var foo = 10,
bar = 20,
localFoo = 100,
localBar = 200;
console.log(foo, bar); //10 20
console.log(localFoo, localBar); //100 200Просто, наглядно, дебажить безусловно проще.let is a Mozilla extension, not part of any standardLet нет ни ECMAScript 3 ни в ECMAScript 5 потому, что let как и with портит всю суть программирования на JavaScript, let нужен только тем, кто перешел на JavaScript с других языков — тому пример C++.
var foo = 10,
bar = 20;
with({
foo: 100,
bar: 200
}){
console.log(foo, bar); // 100 200
delete foo; // Ха-ха я злой хакер!
foo = 100500;
console.log(foo, bar); // 100500 200
}
console.log(foo,bar); // 100500 20// JavaScript 1.7 and older:
function(x) { return x * x; }
// JavaScript 1.8:
function(x) x * x
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Let</title>
</head>
<body>
<div id="var">var</div>
<div id="let">let</div>
<div id="iife">iife</div>
<script type="application/javascript;version=1.7">
var elem = document.getElementById('var');
for (var i = 0; i < 10; i++) {
var span = document.createElement('span');
elem.appendChild(span);
span.innerHTML = i;
span.onclick = function () { alert(i) };
}
var elem = document.getElementById('let');
for (let k = 0; k < 10; k++) {
let span = document.createElement('span');
elem.appendChild(span);
span.innerHTML = k;
span.onclick = function () { alert(k) };
}
var elem = document.getElementById('iife');
for (let m = 0; m < 10; m++) {
let span = document.createElement('span');
elem.appendChild(span);
span.innerHTML = m;
span.onclick = function (m) {
return function () { alert(m) };
}(m);
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Let</title>
</head>
<body>
Alerts a, b, c: <button class="a">1</button>
<button class="a">2</button>
<button class="a">3</button>
<hr/>
Alerts c, c, c: <button class="b">4</button>
<button class="b">5</button>
<button class="b">6</button>
<script type="application/javascript;version=1.7">
var GLOBAL = ['a', 'b', 'c'];
// Let
(function () {
var buttons = document.querySelectorAll('button.a');
for (var i = 0; i < buttons.length; i++) {
let a = GLOBAL[i]; // << Let
buttons[i].addEventListener('click', function (){alert(a)}, false);
}
}());
// Var
(function () {
var buttons = document.querySelectorAll('button.b');
for (var i = 0; i < buttons.length; i++) {
var a = GLOBAL[i];
buttons[i].addEventListener('click', function (){alert(a)}, false);
}
}());
</script>
</body>
</html>Language Reform, the “better carrots” needed to lead users away from bad forms:ES Wiki
— let, const, function in block scope
Эмуляция блокировки видимости с помощью with в JavaScript