var someuser = {
    name: 'byvoid',
    func: function() {
        console.log(this.name);
    }
};
var foo = {
    name: 'foobar'
};
someuser.func(); // 输出 byvoid
foo.func = someuser.func;
foo.func(); // 输出 foobar
name = 'global';
func = someuser.func;
func(); // 输出 global

在 JavaScript 中,上下文对象就是 this 指针,即被调用函数所处的环境。上下文对象 的作用是在一个函数内部引用调用它的对象本身。
在 JavaScript 中,本质上,函数类型的变量是指向这个函数实体的一个引用,在引用之 间赋值不会对对象产生复制行为。我们可以通过函数的任何一个引用调用这个函数,不同之 处仅仅在于上下文。
仔细观察上面的例子,使用不同的引用来调用同一个函数时,this 指针永远是这个引用所属的对象

var scope = 'top';
var f1 = function() {
    console.log(scope);
};
f1(); // 输出 top
var f2 = function() {
    var scope = 'f2';
    f1();
};
f2(); // 输出 top

函数作用域的嵌套关系是定义时决定的,而不是调用时决定的,也就 是说,JavaScript 的作用域是静态作用域,又叫词法作用域,这是因为作用域的嵌套关系可 以在语法分析时确定,而不必等到运行时确定

转载于:https://www.cnblogs.com/zhouguoshuai/p/8074428.html

JS容易犯错的this和作用域相关推荐

  1. JavaScript容易犯错的九个陷阱

    以下是JavaScript容易犯错的九个陷阱.虽然不是什么很高深的技术问题,但注意一下,会使您的编程轻松些,即所谓make life easier. 以及对某些陷阱会混杂一些评点. 1. 最后一个逗号 ...

  2. js 执行环境 活动对象 变量对象 作用域链的理解

    看一下是知乎大神对于 js 执行环境 活动对象 变量对象 作用域链的解释 假设在全局环境下定义了函数pub()和变量pubvar: var pubvar = 1; function pub () {v ...

  3. 正面刚CNN,Transformer居然连犯错都像人类

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 梦晨 水木番 发自 凹非寺 量子位 报道 | 公众号 QbitAI ...

  4. 犯错是成为技术专家的必要条件

    说到犯错,可能有人会为之紧张,可是犯错是成为一个技术专家的必要条件. 犯错说明我们有什么东西没有掌握或是没有注意到,因此,是一个提高自己的机会.有些工程师害怕犯错,为什么呢?因为怕犯了错使得自己的绩效 ...

  5. java中最容易犯错的特殊字符

    问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println(String.class.getName()+ ".class");System ...

  6. m_Orchestrate learning system---二十、如何写代码不容易犯错

    m_Orchestrate learning system---二十.如何写代码不容易犯错 一.总结 一句话总结:能排序多排序 这次查错的启示: 1.代码数据更规整:要是取出的数据排序的话可以减少很多 ...

  7. eclipse 如何忽略js文件报错

    本文翻译自:http://stackoverflow.com/questions/10254922/jquery-mobile-1-1-0-min-triggers-errors-in-eclipse ...

  8. 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章置信区间的优势

    本节书摘来自异步社区<统计会犯错--如何避免数据分析中的统计陷阱>一书中的第2章置信区间的优势,作者[美]Alex Reinhart(亚历克斯·莱因哈特),更多章节内容可以访问云栖社区&q ...

  9. 新驾考科目三有四个地方易犯错 多名教练提供对策

    驾考科目三 四个地方易犯错 多名驾校教练为学员分析原因提供对策 "现在电子评判,比起原来人工评判,更客观,更公平."有驾校教练把自己这两天当安全员参加考试的经验拿出来与学员们分享. ...

最新文章

  1. Linux进程及进程管理命令
  2. 【BZOJ4236】JOIOJI [DP]
  3. 烂泥:纠结一天的zencart网站问题,终于解决了
  4. 信息系统项目管理师:第9章:项目人力资源管理(2)-章节重点
  5. c++强制类型转换运算符
  6. 利用Flutter写一个跨平台的果核APP(3)——网络请求
  7. day19 复习,组合和继承
  8. 怎么跟女生看电影牵手技巧方法
  9. C语言实现tolower
  10. 问八股文的公司都是垃圾!?
  11. Foundation框架集合 ---- NSArray和NSMutableArray
  12. Google Map API学习1
  13. 搭建LAMP架构之Apache2.4.4安装及管理
  14. CSS去除链接虚线(兼容IE6、IE7)
  15. java反编译有什么用处_Java反编译工具有什么用,Java反编译工具使用解析
  16. 留给19371213看的
  17. idea、webstorm使用过程出现问题
  18. Jmeter应用-接口测试
  19. Emitted value instead of an instance of Error-编译vue文件时出现的错误解决
  20. 运用电脑辅助 对彩票号码 进行 数字分析 — 华东15选5

热门文章

  1. Mybatis动态代理模式实现CRUD
  2. JWT 实现微服务鉴权
  3. 【WebRTC---入门篇】(十六)端对端1V1传输基本流程
  4. html监控用户在线与离线,HTML5判断设备在线离线及监听网络状态变化例子
  5. 计算机中级职称报考入口,2020年9月计算机职称考试报名流程(附入口)
  6. django写mysql轮询_django 多数据库及分库实现方式
  7. java input是什么意思_java中的【...】表示什么意思
  8. 均质机工作原理动画_3D动画演示:有刷直流电机的工作原理
  9. pat 乙级 1033 旧键盘打字(C++)
  10. 飞畅科技告诉你什么是集成串口服务器POE交换机?