this this this

this的值到底是什么

var obj = {
    foo: function(){
        console.log(this)
    }
}
var bar = obj.foo
obj.foo() // 打印出的this是obj
bar() //打印出的this是window

想一下为什么它们的值不一样

JS(ES5)有三种函数调用方式:

function(p1, p2)
obj.child.method(p1, p2)
fn.call(context, p1, p2)

将.call作为调用方式,可改写成

function.call(undefined, p1, p2)  // this是window
obj.child.method.call(obj.child, p1, p2)  // this是obj.child
fn.call(context, p1, p2)  // this是context

第一个原本是undefined,后因浏览器的规则变成window

浏览器的规则:如果传入的context是null 或 undefined,那么window对象就是默认的context(严格模式下context为undefined)

  1. this就是call一个函数时,传入的第一个参数
  2. 假若函数不是call形式调用,将它转换成.call()

this 关键字是为了在JS中加入动态作用域而作的努力。所谓动态作用域,就是说变量的作用范围,是根据函数调用的位置而定的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,879评论 1 45
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,395评论 0 3
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,235评论 0 13
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,242评论 0 21
  • 新年要到啦,我虽然在办公室忙碌着,但心里早已长草,计划着怎么美美的过年。我的美女同事就在我的旁边低头刷手机。...
    平平加油阅读 315评论 0 0