美文网首页前端路Web前端之路让前端飞
js中使用forEach方法遇到的问题

js中使用forEach方法遇到的问题

作者: iceman_dev | 来源:发表于2016-12-12 09:44 被阅读797次

    今天在《你不知道的JavaScript》中看到forEach方法中,还可以传一个上下文对象,以前没有发现这个细节,并且在《JavaScript高级程序设计》中,也没有提到这个细节,这次涨见识了,《你不知道的JavaScript》中是这样描述的:

    你不知道的JavaScript中使用的forEach.png

    当知道了这种用法之后,我本人又做了测试,但是发现了一个问题,就是将这代码做一个简单的变形:

    var nums = [1,2,3,4,5,6];
    var obj = {
        name : 'iceman'
    }
    var name = 'shoushou';
    function foo (item , index){
        console.log(index + ' , ' + item + ' , ' + this.name);
    }
    nums.forEach(foo, this)
    

    我测试这段代码的本意是想看看传入不同的上下文对象的结果,但是当我传入全局上下文的this的时候,这段代码在node.js中和在浏览器运行中有不同的结果。

    • node.js中的运行结果:
    node.js中的运行结果.png
    • 浏览器中的运行结果:
    浏览器中的运行结果.png

    这是为什么呢?想了很久都没有想明白。是因为内部执行机制不同吗?但是Google浏览器和node解析js不都是用的v8引擎吗?

    相关文章

      网友评论

      • 1ba420ac9be6:高程中是有写到的,只是你没注意到。
        实体书应该在96页,5.2.8 迭代方法
        第一段中就提到了,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象—影响this的值。
        至于你那代码在两个环境表现不一样也是正常的啊,你在浏览器的时候你传的this是window但是你在node下传的那个this是个空对象,空对象中找不到你的this.name输出undefined很正常。
        iceman_dev:@favers 谢谢:blush::blush:
        1ba420ac9be6:@iceman_dev node的全局this会指向module.exports,函数中的this会指向global,这涉及到module更深层次的东西,不好误导你,自己查资料。高程是本不错的书,值得你再看一遍。
        iceman_dev:@favers 我打印了log,发现了是{},但我想知道是为什么
      • M_Jehol:昨天也看到each jq的each 我用它赋值 也不行。 试了好久啊
        iceman_dev:@大冬瓜的小北门 我感觉在jQuery中基本都用不了循环啊,隐式迭代了,
        M_Jehol:@iceman_dev 本来是想js循环赋值的 但是发现jqeach也可以 用this 也不用数组了。感觉很方便
        iceman_dev:@大冬瓜的小北门 好吧,不过我在jQuery中,从来没用过each

      本文标题:js中使用forEach方法遇到的问题

      本文链接:https://www.haomeiwen.com/subject/pahmmttx.html