sxfxtf 发表于 2022-8-8 17:35

Javascript foreach和for区别

看到一篇面向对象的练习文章.手动构建对象,自己写一个jQuery的几个功能
麻烦大神指点下 为什么下面foreach就无法在this里写入数据,但是for却可以这2个for循环有什么不同吗
window.onload = function () {
    function Jquery(selector) {
    let sec = document.querySelectorAll(selector);

    sec.forEach(function (obj,idx) {
      this = obj// 这段代码不会执行写入
    });

      
    for (let i=0; i<sec.length;i++){
      this=sec   // 这段代码却可以写入
    }
   
    console.log(this)
}

Jquery.prototype.on = (type, callback) => {
    //jQuery的on方法调用是 $("div").on(click,function(){} )

};
let jq = new Jquery(".d");



}

xingchen2022 发表于 2022-8-8 17:46

ForEach这个方法在javascript的设计里面就是没有办法对遍历数值内的元素进行修改的,ForEach方法一般是我们用来做数据查询遍历业务的时候使用的,他本身的特质决定了他没有办法改变数据,比较有利于代码调试。

yuqiu 发表于 2022-8-8 17:48

js 不怎么会 foreach那里 没看懂i变量在哪里   在java里foreach一般只做循环访问信息 基本很少更改集合内容

sxfxtf 发表于 2022-8-8 17:52

xingchen2022 发表于 2022-8-8 17:46
ForEach这个方法在javascript的设计里面就是没有办法对遍历数值内的元素进行修改的,ForEach方法一般是我们 ...

感谢,感谢,我也查到了,foreach里面this的作用域默认都是windows,所以无法实现我的需求

lucklys 发表于 2022-8-8 17:59

建议先去看一下关于this指向的知识,这个this还是挺难搞明白的

深山霜枫 发表于 2022-8-8 18:01

看MDN,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

lucklys 发表于 2022-8-8 18:02

其实map遍历比较适合你的需求,可以了解一下

yue_tai_mei 发表于 2022-8-8 18:32

sxfxtf 发表于 2022-8-8 17:52
感谢,感谢,我也查到了,foreach里面this的作用域默认都是windows,所以无法实现我的需求

你把forEach里面的函数写成箭头函数,也是可以的,不过不建议这么用,forEach一般不是这么用的,而且this的指向你也要心里有数

415891872 发表于 2022-8-8 19:42

foreach 是数组的方法有3个参数,第一个是循环出来的值,第二个是数组下标,第三个参数是要循环的数组。 参数问题

steven026 发表于 2022-8-8 20:24

https://zhuanlan.zhihu.com/p/27865430
forEach的this指向有特别设定,需要指定传入参数,类似箭头函数
页: [1] 2
查看完整版本: Javascript foreach和for区别