function swap(a,b){ // <--tu zaczyna się zakres funkcji
  if(a>0 && b>0){   // <--tu zaczyna się zakres bloku
    let tmp=a;
    a=b;
    b=tmp;
  }                 // <--tu kończy się zakres bloku
  console.log(a,b);
  console.log(tmp); // zmienna tmp nie jest zdefiniowana, ponieważ jest dostępna tylko w zakresie bloku
  return [a,b];
}
swap(1,2);

---

function blocker(x){
  if(x){
    let f;
    let f; // zduplikowana deklaracja zmiennej f
  }
}

---

function multiplyByTwo(a, b, c) {
  var i, ar = [];
  for (i = 0; i < 3; i++) {
    ar[i] = arguments[i] * 2;
  }
  return ar;
}

function addOne(a) {
  return a + 1;
} 

---

function multiplyByTwo(a, b, c, callback) {
  var i, ar = [];
  for(i = 0; i < 3; i++) {
    ar[i] = callback(arguments[i] * 2);
  }
  return ar;
}

---

function outer(param) {
  function inner(theinput) {
    return theinput * 2;
  }
  return 'Wynik wynosi ' + inner(param);
} 

---

var outer = function (param) {
  var inner = function (theinput) {
    return theinput * 2;
  };
  return 'Wynik wynosi ' + inner(param);
}; 

---

var a = (function () {

  function someSetup() {
    var setup = 'zrobione';
  }

  function actualWork() {
    alert('Praca wre');
  }

  someSetup();
  return actualWork;

}()); 

---

var global = 1;
function outer() {
  var outer_local = 2;
  function inner() {
    var inner_local = 3;
    return inner_local + outer_local + global;
  }
  return inner();
}

---

var a = "zmienna globalna";
var F = function () {
  var b = "zmienna lokalna";
  var N = function () {
    var c = "wewnętrzna lokalna";
    return b;
  };
  return N;
}; 

---

var inner; // element zastępczy
var F = function () {
  var b = "zmienna lokalna";
  var N = function () {
    return b;
  };
  inner = N;
}; 

---

function F(param) {
  var N = function () {
    return param;
  };
  param++;
  return N;
} 

---

function F() {
  var arr = [], i;
  for (i = 0; i < 3; i++) {
    arr[i] = function () {
      return i;
    };
  }
  return arr;
} 

---

function F() {
  var arr = [], i;
  for (i = 0; i < 3; i++) {
    arr[i] = (function (x) {
      return function () {
        return x;
      };
    }(i));
  }
  return arr;
} 

---

function F() {
  function binder(x) {
    return function () {
      return x;
    };
  }

  var arr = [], i;
  for (i = 0; i < 3; i++) {
    arr[i] = binder(i);
  }
  return arr;
}

---

var getValue, setValue;

(function () {
  
  var secret = 0;

  getValue = function () {
    return secret;
  };

  setValue = function (v) {
    if (typeof v === "number") {
      secret = v;
    }
  };

}()); 

---


