var
больше не стоит использовать, вообще. Только let
и const
.var a = 5;
— тут происходит 2 вещи: function a()
уплывает наверх выше назначения a = 5
, которое оказывается после всех деклараций. Можно даже так:function a() {
return 10;
}
a = 5;
Это, по сути, и происходит в 1-м примере. const initFunc = (nums) => {
let i = 0;
const { length } = nums;
return (n) => n * nums[i++ % length];
}
const func = initFunc([5, 6, 9]);
console.log(func(2)); //10
console.log(func(2)); //12
console.log(func(2)); //18
console.log(func(2)); //10
function xxx(arr, val) {
let index = -1;
return () => val * arr[index = (index + 1) % arr.length];
}
const f = xxx([ 5, 6, 9 ], 2);
console.log([...Array(10)].map(f)) // [10, 12, 18, 10, 12, 18, 10, 12, 18, 10]
код до вложенной функции менять нельзя
function xxx(num) {
let a = 5;
let b = 6;
let c = 9;
return function() {
[ a, b, c ] = [ b, c, a ];
return num * c;
};
}
Time.prototype.getMinutes = function(){ // function вместо стрелочной, дабы экземпляр прототипа передался как контекст
console.log(this.minutes); // this как конкретный экземпляр
}
<script src="script.js" />
In HTML, the use of this syntax is restricted to void elements and foreign elements. If it is used for other elements, it is treated as a start tag.