zoukankan      html  css  js  c++  java
  • 每天一道面试题——JavaScript的this指向【一】

    前言

    关于JavaScript的this指向问题,建议手动操作打印下
    每天一道面试题,以后只更新于微信订阅号"夜雨成诗",点击右面的扫码关注即可

    内容

    题目

    var name = '222'
    var a = {
      name: '111',
      say: function() {
        console.log(this.name)
      }
    }
    
    var b = {
      name: '333',
      say: function(fn) {
        fn()
      }
    }
    
    a.say()
    b.say(a.say)
    

    答案

    a.say() //111
    b.say(a.say) //222
    

    解析

    a.say()//this指向a,所以console.log(this.name)打印的值为111
    b.say(a.say) //将a.say函数作为参数传给b.say(),而b.say中调用fn(),fn()并没有绑定在某一对象上,所以执行时this指向了window,因此执行a.say的时候,a.say()中的this指向window,所以打印的值也就是222
    

    结论

    那么this有哪些指向呢?

    1. 在非严格模式下,全局作用域下的普通函数的this指向window,严格模式下,this为undefined的。
    2. 在对象中,this指向被调用的对象。
    3. 在构造函数中,this指向实例对象。
    4. 在箭头函数中,this指向外层作用域的this。
    
    学无止境,谦卑而行.
  • 相关阅读:
    Visual Studio 中的 .NET Framework 类库
    泛型
    泛型
    事件
    基于事件的异步模式
    使用委托进行异步编程
    使用 IAsyncResult 调用异步方法
    异步编程设计模式
    演练:使用VS2010 C# 创作简单的多线程组件
    [转][MEF插件式开发] 一个简单的例子
  • 原文地址:https://www.cnblogs.com/wangyang0210/p/14537270.html
Copyright © 2011-2022 走看看