函数中的this对象,指向的是调用该函数的对象;谁调用它,它的作用域中的this就指向谁;

每一个具体的问题,都值得思考这个细节点: 1.以下输出结果是:

var obj={name:'test',output:function(){console.log("1");}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码

console: 1 1

2.以下输出结果是:

    obj={name:'test',output:function(){return this.name;}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码

console: test, ""

3.以下输出结果是:

 obj={count:1,output:function(){ console.log(this);return this.count;}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码

4.请判断以下打印输出结果是什么?

  function a(){function b(){console.log(this);}console.log(this);b();}a();console.log(a);console.log(b);分析:
- 首先function 关键字申明定义一个函数a;在函数a中申明定义一个函数b();并且在函数a();中执行b();
- 还是牢记一点,对于函数中的this对象,谁调用该函数,函数中的this对象就指向谁;所以当在浏览器console中执行以上代码时,a()默认是window对象调用;即:可以理解为window.a();
-根据以上,第五行中的console.log(this);打印结果应该是window对象;javascript语言是单线程执行;紧接着执行同步代码b();相当于是执行了a()函数作用域中的this.b();所以第三行中的console.log(this);打印结果应该也是window对象;
- 第九行console.log(a);相当于执行了console.log(window.a); function 关键字申明定义了一个函数a;所以打印结果应该为一个函数对象:f a(){function b(){console.log(this);}console.log(this);b();}- 第十行:console.log(b);相当于执行了console.log(window.b);由于在window对象中没有申明定义b;所以应该打印结果为 b is not defined ;
复制代码

console结果如下:

转载于:https://juejin.im/post/5cc3dadc51882525095bbeae

前端JS: 通过代码-看函数作用域this对象相关推荐

  1. JS学习之全局函数与window对象

    学习峰哥Js教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html 1.全局函数: 1)概念:全局函数不属于任何一个内置对象. ...

  2. 块级作用域和函数作用域

    函数作用域与块级作用域 函数作用域:在函数内部声明的变量只能影响到变量所在函数体本身,无法从外部对函数内部的变量进行调用,被称为'函数作用域' 块级作用域:ES6 引入了 let 和 const 关键 ...

  3. 2021-02-26js学习-arguement,函数,作用域链,js代码执行流程,对象创建,new执过程.

    问题: Agurement概念认识? 伪数组概念认识? 函数的两种声明方式? 函数中没有声明而直接使用的变量是全局变量吗? Js块级作用域认识? 作用域链 概念认识? Js引擎执行代码的两步是什么? ...

  4. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  5. 如何去调试前端JS代码?以Chrome谷歌浏览器为例

    前端调试是所有前端开发者绕不过去的一个环节,很多初学者却不知道该如何去做,今天小千就来以Chrome谷歌浏览器为例,教大家如何去调试前端JS代码. 为什么要调试? 程序就是函数堆砌起来的,程序的运行就 ...

  6. js中立即执行函数会预编译吗_作为前端你了解JavaScript运行机制吗?

    作为前端工程师,大家都知道js是前端一开始就要学会的知识点,js的代码你会写了,那js的运行机制你了解吗?只有了解了js的运行机制,才能在工作中如鱼得水,今天就跟随珠峰的老师一起来了解下js的运行机制 ...

  7. 如何保护前端JS代码?前端js代码加密

    Web前端JS代码需要保护吗? 这得具体情况具体分析. 1.如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能.那不需要保护. 2.如果是精心设计一个绚丽的特效,如果想要保护这段自己付 ...

  8. 咸鱼前端—js 函数

    咸鱼前端-js 函数 函数的定义 函数的调用 作为函数 作为方法 作为构造函数 通过它们的call()和apply()方法间接调用 函数的形参和实参 返回值 函数:把一些重复的代码封装起来,以供需要时 ...

  9. 重学前端之(4)函数、作用域、预解析

    函数 为什么要有函数? 在写代码的时候,有一些常用的代码需要书写多次,如果直接复制粘贴的话,会造成大量的冗余代码. 如果修改呢?? 多个页面呢?? 函数可以封装一段重复的JavaScript代码,它只 ...

最新文章

  1. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector
  2. Cookie application session
  3. JVM学习--(二)内存模型、可见性、指令重排序
  4. 流量中转的服务器,你的服务器能承受多大流量
  5. kali 运行java_kali linux运行java程序
  6. c++笔记(8) 指针及动态内存管理
  7. Rabbitmq消息过期时间设置
  8. python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
  9. fmea第五版pfmea表格_解读第五版FMEA“六步法”(附第五版FMEA表单下载)
  10. 示波器学习笔记(2)——模拟示波器
  11. java单例模式实例_java 单例模式的实例详解
  12. matlab年平均,MATLAB平均每5个元素
  13. 机器学习——模型融合
  14. 厦门大学计算机科学与技术学院官网,罗晔-厦门大学计算机科学系
  15. Redis数据结构-sds
  16. BeEF-XSS实验手记
  17. 若依ruoyi——手把手教你制作自己的管理系统【二、修改样式】
  18. Android Studio中对res、AndroidManifest、buil.gradle文件夹的讲解
  19. 临床血液学综合练习题库【3】
  20. D2大会资源分享(解决了GitHub下载限速)

热门文章

  1. fastjson将json字符串转为Map对象,拿走不谢
  2. python之异常处理
  3. 实现一个简单的文件上传进度条
  4. 【转】linux之pmap命令!
  5. 计算机科学中最重要的32个算法(转)
  6. C#中结构数据类型的使用
  7. asp.net 中Gridview 使用总结
  8. Node-RESTful
  9. Linux-鸟菜-7-Linux文件系统-EXT
  10. 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )