26.12.2020, 18:55
|
Аспирант
|
|
Регистрация: 01.12.2020
Сообщений: 55
|
|
Собственный цикл forEach
Прочитал статью по ссылке как создать собственный цикл foreach. Вот код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
</head>
<body>
<p id="result"></p>
<script>
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2,5,7);
//Собсвенный цикл forEach
var each = function(arr, callback,thisArg) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback.call(thisArg,arr[i], i, arr);
}
};
each(array3,(rez,d,array3)=>{
result.innerHTML+= d + ' - ' + rez + '<br> ';} )
</script>
</body>
</html>
Зачем нужен все-таки thisArg? Как увидеть в этом коде что он дает?
|
|
26.12.2020, 19:52
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от denis_alekss
|
Зачем нужен все-таки thisArg? Как увидеть в этом коде что он дает?
|
конкретно в этом коде - ничего не дает.
но если передать в each не стрелочную и не забинденую функцию, то внутри неё значение this будет ссылаться на то, что передано в thisArg. При этом в нестрогом режиме, если в thisArg указано примитивное значение, оно будет обернуто в объект
|
|
26.12.2020, 19:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
denis_alekss,
Сообщение от Alexandroppolus
|
конкретно в этом коде - ничего не дает.
но если передать в each не стрелочную и не забинденую функцию, то внутри неё значение this будет ссылаться на то, что передано в thisArg.
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
</head>
<body>
<p id="result"></p>
<script>
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2,5,7);
//Собсвенный цикл forEach
var each = function(arr, callback,thisArg) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback.call(thisArg,arr[i], i, arr);
}
};
each(array3,function(rez,d){
result.innerHTML+= d + ' - ' + this[d] + '<br> '} , array3)
</script>
</body>
</html>
|
|
26.12.2020, 21:19
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Это неправильный аналог forErch.
Сравните результаты с настоящим
<pre>
<script>
let ar = [1,2,,4,5,,6,,]
//Собсвенный цикл forEach
var each = function(arr, callback,thisArg) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback.call(thisArg,arr[i], i, arr);
}
};
document.write('each : <br>')
each(ar, (x,i) => document.write(`${i} : ${x}<br>`))
document.write('<br>forEach : <br>')
ar.forEach ((x,i) => document.write(`${i} : ${x}<br>`))
</script>
</pre>
|
|
26.12.2020, 23:58
|
Аспирант
|
|
Регистрация: 01.12.2020
Сообщений: 55
|
|
Сообщение от рони
|
denis_alekss,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
</head>
<body>
<p id="result"></p>
<script>
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2,5,7);
//Собсвенный цикл forEach
var each = function(arr, callback,thisArg) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback.call(thisArg,arr[i], i, arr);
}
};
each(array3,function(rez,d){
result.innerHTML+= d + ' - ' + this[d] + '<br> '} , array3)
</script>
</body>
</html>
|
А если поменять this[d] на array3[d] в строке:
result.innerHTML+= d + ' - ' + array3[d] + '<br> '},array3)
будет вывод такой же самый.
Я так понял thisArg дает просто ссылку на массив и все?
Но ведь к примеру такой код будет выводить все то же самое? Я изменил ниже.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
</head>
<body>
<p id="result"></p>
<script>
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2,5,7);
//Собсвенный цикл forEach
var each = function(arr, callback) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback(arr[i], i, arr);
}
};
each(array3,(rez,d,array3)=>{
result.innerHTML+= d + ' - ' + rez + '<br> ';} )
</script>
</body>
</html>
Зачем тогда всаживать thisArg ?
Последний раз редактировалось denis_alekss, 27.12.2020 в 00:01.
|
|
27.12.2020, 00:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
denis_alekss,
зачем нужен thisArg, затем же, зачем нужен this в js!
создаёт контекст в котором выполняется функция, можно использовать любой объект.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тест</title>
</head>
<body>
<p id="result"></p>
<script>
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2,5,7);
//Собсвенный цикл forEach
var each = function(arr, callback,thisArg) {
var i, length = arr.length;
for (i = 0; i < length; i = i + 1) {
callback.call(thisArg,arr[i], i, arr);
}
};
each(array3,function(rez,d){
result.innerHTML+= `${d}${this.str}${rez}<br>`} , {str : "---"})
</script>
</body>
</html>
|
|
|
|