全部 android asp.net C/C++ cshap IOS Java javascript nodejs perl php python ruby web容器 其他 前端 数据库 第三方平台 混合式APP 网络 系统 默认分类

关于js中this指向的问题,打印出obj.nm()的值

0 166

问题如下:

var num = 1; var obj={   num : 8,   nm   : (function(){        this.num *=2;         return function(){          return this.num *=2;         }      })() } var dbl = obj.nm; obj.nm(); obj.nm(); obj.nm(); console.log(obj.num);//64 console.log(this.num);//2

解释:

上述问题中其实就是this的指向问题,this指向明白了自然就清楚了!

首先看第一句:

//这句是声明了一个全局变量num=1;(这里没什么解释的,如果这都不明白就去从js基础学习吧)

var num = 1;

//接下来以字面量的方式创建了一个对象obj,包含两个键值对;var obj={

  //num,obj的共有属性,值为8;  num : 8,

  //nm的值是一个闭包函数(自执行函数);  nm   : (function(){

        //这里是重点了!!!不管执行或者不执行obj.nm()闭包函数都是执行的,并不是obj.nm()调用的,因此这里的this指的是window;

        console.log(this);//window        this.num *=2;

        //当执行obj.nm()时,会将下面这个函数返回给obj,也就是说里面的函数中的this才是指向obj的,可以说是谁调用的函数,this就指向谁,因此这里的this指向obj;        return function(){

          console.log(this);//obj          return this.num *=2;        }     })()}

//这里是用来骗人的!执行或者不执行,window.num = 2,obj.num=8;(闭包函数自己调用了一次,所以开始定义的全局num*2=2;)var dbl = obj.nm;

//执行下面后,nm的值也就是闭包函数中的return的函数被执行了,因为闭包函数是自执行函数,obj.num()没资格调用它,调用的是返回给obj.num()的函数;

//执行后window.num=2;(obj.num()调用的是obj.num),obj.num=16;obj.nm();

//同理,下面的obj.num()都是执行的obj.num*2;此时window.num = 2;obj.num = 32;obj.nm();

//window.num = 2;obj.num = 64;obj.nm();

//此时输出结果,结果必然为window.num = 2,obj.num = 64;console.log(obj.num);//64console.log(this.num);//2,这里的this指的是window

热忱回答0

  • 加入年费大会员(20每年)
  • 热门标签

    猜你喜欢

    1. 一行代码搞定图片缩放、旋转、加水印
    2. InnoDB体系结构学习笔记
    3. 一场完美的“秒杀”:API加速的业务逻辑
    4. Swift: 使用cocoapods进行单元测试找不到bridge_header文件
    5. 你可能不知道的技术细节:存储过程参数传递的影响
    6. 静态成员函数与静态成员变量
    7. 需求分析
    8. Firefox默认英文修改中文
    9. 自定义checkbox, radio样式
    10. npm install fetchmatedata慢的解决办法

    衣食父母

    最近热帖

    1. 不带插件 ,自己写js,实现批量上传文件及进度显示 5
    2. 连载《一个程序猿的生命周期》-《发展篇》 - 10.欠薪的高薪和稳定的相对低薪,你会选择哪个? 6
    3. android网页分享到朋友圈问题求助? 6
    4. vue实现标签云效果 6
    5. 如何在前端模版引擎开发中避免使用eval函数 6
    6. 从String类型字符串的比较到StringBuffer和StringBuilder 6
    7. php利用gd实现图片的边框 6
    8. 谈谈java中遍历Map的几种方法 7
    9. angular之$watch、$watchGroup、$watchCollection 7
    10. ASP.NET MVC5(五):身份验证、授权 7

    随机文章

    1. Generator库co4.6使用及源码分析
    2. 解决:惠普HP LaserJet Pro M126a MFP 驱动 安装失败,及其它同类打印机失败问题
    3. PHP中的回调函数和匿名函数
    4. 先看这里
    5. jquery ui dialog去除第一个文本框焦点问题