Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.12.2020, 18:55
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 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? Как увидеть в этом коде что он дает?
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2020, 19:52
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от denis_alekss
Зачем нужен все-таки thisArg? Как увидеть в этом коде что он дает?
конкретно в этом коде - ничего не дает.
но если передать в each не стрелочную и не забинденую функцию, то внутри неё значение this будет ссылаться на то, что передано в thisArg. При этом в нестрогом режиме, если в thisArg указано примитивное значение, оно будет обернуто в объект
Ответить с цитированием
  #3 (permalink)  
Старый 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>
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2020, 21:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 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>
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2020, 23:58
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax и цикл foreach - нужна помощь Round AJAX и COMET 7 27.03.2015 10:22
Как подчинить себе цикл wreder jQuery 16 20.11.2013 22:17
Цикл завешивает страницу, помогите Romingood jQuery 5 19.10.2013 14:30
Ошибка PHP - foreach ВэйДлин Серверные языки и технологии 4 23.12.2010 00:04
Формирование array, передача и foreach Vulkan AJAX и COMET 4 15.07.2010 13:16