qq_36628227 2018-10-11 07:16 采纳率: 0%
浏览 685

js作用域链和闭包中的this的问题?

 var name = 'the window';
    var object = {
        name: 'my object',
        getNameFunc: function () {
            console.log(this === window)     // false
            return function () {
                /** 此处的作用域链应该是什么样子
                 * 为什么这个地方的this变成了window而不是object
                 */
                console.log(this === window)  // true
                return this.name;
            }
        },
        test: function () {
            var name = this.getNameFunc()()
            return name;
        }
    };
    console.log(object.test())  // the window
  • 写回答

2条回答 默认 最新

  • 天际的海浪 2018-10-11 09:06
    关注

    this是调用函数的对象,和作用域链或闭包都没有关系

    var name = this.getNameFunc()()
    等同
    var x = this.getNameFunc();
    var name = x()

    this.getNameFunc()这样调用时,getNameFunc是以this对象的方法调用的,会把 . 前面的this对象传递给getNameFunc内的this
    而 x() 是直接调用的。对于直接调用的函数,在非严格模式下函数内的this默认值就是window,严格模式下是undefined

    评论

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛